0

読みたいtextfile.txtを受け取ったとしましょう。これはファイル内のテキストです:

23:years:old
15:years:young

このuseDelimiter方法を使用して、プログラムに:改行が区切り文字であることをどのように伝えることができますか?テキストを一行に並べてuseDelimter(":");作品を使う。問題は、数行のテキストを取得したときです。

Scanner input = new Scanner(new File("textfile.txt));
input.useDelimiter(:);

while(data.hasNextLine()) {
 int age = input.nextInt();
 String something = input.next();
 String somethingelse = input.next();
}

このコードを使用すると、inputMisMatchエラーが発生します。

4

6 に答える 6

2

試す

scanner.useDelimiter("[:]+");

完全なコードは

Scanner scanner = new Scanner(new File("C:/temp/text.txt"));
scanner.useDelimiter("[:]+");
while (scanner.hasNext()) {
    System.out.println(scanner.next());
}

出力は

23
years
old
15
years
young
于 2012-10-19T04:11:06.893 に答える
1

このコードを使用する

            Scanner input;
        String tokenizer[]; 
        try {
            input = new Scanner(new File("D:\\textfile.txt"));
            input.useDelimiter("\\n");
                while(input.hasNextLine()) {
                    tokenizer = input.next().split(":"); 
                     System.out.println(tokenizer[0]+"   |"+tokenizer[1]+" | "+tokenizer[2]);

                    }


        }catch(Exception e){}

それはあなたに次のような出力を与えます

23 |years | old

15 |years | young
于 2012-10-19T04:22:44.653 に答える
0

これを行うには2つの方法があります。

  1. 文字列を連結して1行にします。
  2. 最初に「改行」を区切り、次に「:」を区切ります。各戻り文字列トークン。
于 2012-10-19T03:51:11.920 に答える
0

あなたが望むのはすべてを一度に分割することだけなら、私はあなたが使うことができると思います

useDelimiter(":\\n")

これは:とnewspaceの両方で分割されるはずですが、特にテキストの各行が同じ形式で設定され、完全なエントリを表す場合は、データを処理する最も効率的な方法ではありません。その場合、私の提案は、このように、最初は新しい行でのみ分割することです。

s.useDelimiter("\\n");
while(s.hasNext()){
    String[] result = s.next.split(":");
    //do whatever you need to with the data and store it somewhere
}

これにより、データを1行ずつ処理し、必要な場所で分割することができます。ただし、行ごとに処理する予定がある場合は、BufferedReaderを確認することをお勧めします。これは、処理を非常に簡単にするreadLine()関数を備えているためです。

于 2012-10-19T04:02:05.633 に答える
0

':'と改行の両方を含む区切り文字パターンを作成したいと思うかもしれませんが、[\ s |:] +は、1つ以上の空白文字と一致する正規表現であり、':'でもあります。入れてみてください:

input.useDelimiter("[\\s|:]+");
于 2012-10-19T04:02:07.647 に答える
0

すべての行に3つのフィールドがすべて含まれている限り、使用できますinput.useDelimiter(":\n");

于 2012-10-19T04:04:19.953 に答える