我使用缓冲读卡器从文本文件中一次抓取一行。我也试图使用跟踪整数从文本文件中获取行号。不幸的是, BufferedReader 正在跳过空行(只有 / n 或回车符)。
有没有更好的方法来解决这个问题?会使用扫描仪吗?
示例代码:
int lineNumber = 0;
while ((s = br.readLine()) != null) {
this.charSequence.add(s, ++lineNumber);
}
答案 0 :(得分:23)
我无法重现您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
LineNumberReader
+ Scanner
组合!java.util.Scanner
- 有很多例子%02d %01d
? 答案 1 :(得分:3)
你看过LineNumberReader了吗?不确定这是否对你有帮助。
http://download.oracle.com/javase/6/docs/api/java/io/LineNumberReader.html
答案 2 :(得分:3)
然后必须是FileReader类跳过换行符。
我再次检查了readLine()
的结果,但它没有包含新的行符号,因此它发生在两个类 FileReader 和 BufferedReader 之间。
BufferedReader br = null;
String s = null;
try {
br = new BufferedReader(new FileReader(fileName));
while ((s = br.readLine()) != null) {
this.charSequence.add(s);
}
} catch (...) {
}