5

我正在使用缓冲阅读器从文本文件中一次抓取一行。我正在尝试使用跟踪整数从文本文件中获取行号。不幸的是, 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

Have you looked at LineNumberReader? Not sure if that will help you.

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

于 2010-08-19T23:39:02.240 回答
3

它必须是跳过换行符的 FileReader 类。
我再次检查了结果,readLine()它没有包含换行符,所以它发生在两个类FileReaderBufferedReader之间。

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 回答