5

バッファリーダーを使用して、テキストファイルから一度に 1 行ずつ取得しています。追跡整数を使用して、テキスト ファイルから行番号も取得しようとしています。残念ながら、BufferedReaderは空行 ( /nまたは改行のみの行) をスキップしています。

これを解決するより良い方法はありますか?スキャナーを使用しても機能しますか?

コード例:

int lineNumber = 0;
while ((s = br.readLine()) != null) {
    this.charSequence.add(s, ++lineNumber);
}
4

3 に答える 3

22

BufferedReader空行をスキップするというあなたの主張を再現できませんでした。あるべきではありません。

空行がスキップされるだけではないことを示すスニペットを次に示します。

java.io.BufferedReader

    String text = "line1\n\n\nline4";
    BufferedReader br = new BufferedReader(new StringReader(text));
    String line;
    int lineNumber = 0;
    while ((line = br.readLine()) != null) {
        System.out.printf("%04d: %s%n", ++lineNumber, line);
    }

java.io.LineNumberReader

    String text = "line1\n\n\nline4";
    LineNumberReader lnr = new LineNumberReader(new StringReader(text));
    String line;
    while ((line = lnr.readLine()) != null) {
        System.out.printf("%04d: %s%n", lnr.getLineNumber(), line);
    }

java.util.Scanner

    String text = "line1\n\n\nline4";
    Scanner sc = new Scanner(text);
    int lineNumber = 0;
    while (sc.hasNextLine()) {
        System.out.printf("%04d: %s%n", ++lineNumber, sc.nextLine());
    }

上記のスニペットの出力は次のとおりです。

0001: line1
0002: 
0003: 
0004: line4

関連する質問

于 2010-08-19T23:43:43.433 に答える
3

その場合、改行文字をスキップするのは FileReader クラスでなければなりません。
の結果をreadLine()再度確認したところ、改行記号が含まれていなかったため、FileReaderBufferedReaderの 2 つのクラスの間で発生しています。

BufferedReader br = null;
String s = null;

try {
    br = new BufferedReader(new FileReader(fileName));
    while ((s = br.readLine()) != null) {
        this.charSequence.add(s);
    }
} catch (...) {

}
于 2010-08-23T15:59:44.537 に答える
3

LineNumberReader を見たことがありますか?それがあなたを助けるかどうかわからない。

http://download.oracle.com/javase/6/docs/api/java/io/LineNumberReader.html

于 2010-08-19T23:39:02.240 に答える