8

テキストファイルを1行ずつ読み取るためにスキャナーを使用していますが、スキャナーは各入力を繰り返すため、行番号を取得する方法は?私のプログラムは次のようなものです:

s = new Scanner(new BufferedReader(new FileReader("input.txt")));

while (s.hasNext()) {
System.out.print(s.next());

これはうまくいきますが、例えば:

1,2,3
3,4,5

1,2,3が1行目、3,4,5が2行目にあることを意味する行番号を知りたいのですが、どうすればそれを取得できますか?

4

2 に答える 2

16

LineNumberReaderの代わりにa を使用してBufferedReader、スキャナが処理を行っている間、行番号を追跡できます。

LineNumberReader r = new LineNumberReader(new FileReader("input.txt"));
String l;

while ((l = r.readLine()) != null) {
    Scanner s = new Scanner(l);

    while (s.hasNext()) {
        System.out.println("Line " + r.getLineNumber() + ": " + s.next());
    }
}

注:最初に投稿した「明白な」解決策は、スキャナーが現在のトークンよりも先に読み取るため、機能しません。

r = new LineNumberReader(new FileReader("input.txt"));
s = new Scanner(r);

while (s.hasNext()) {
    System.out.println("Line " + r.getLineNumber() + ": " + s.next());
}

于 2009-08-26T04:28:22.653 に答える
10

ループにカウンターを入れるだけです:

s = new Scanner(new BufferedReader(new FileReader("input.txt")));

for (int lineNum=1; s.hasNext(); lineNum++) {
   System.out.print("Line number " + lineNum + ": " + s.next());
}
于 2009-08-26T05:27:03.393 に答える