Буферный считыватель readLine () с пустыми строками

Я использую буферизованный ридер для получения строки из текстового файла за раз. Я пытаюсь также получить номер строки из текстового файла, используя целое число отслеживания. К сожалению, BufferedReader пропускает пустые строки (те, которые имеют только / n или возврат каретки).

Есть ли лучший способ решить это? Будет ли работать сканер?

Пример кода:

int lineNumber = 0;
while ((s = br.readLine()) != null) {
    this.charSequence.add(s, ++lineNumber);
}
6
задан CSchulz 4 February 2012 в 21:16
поделиться

3 ответа

Я не смог воспроизвести ваше утверждение, что 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

Похожие вопросы

23
ответ дан 8 December 2019 в 03:24
поделиться

Вы посмотрели на LineNumberReader? Не уверен, что это вам поможет.

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

3
ответ дан 8 December 2019 в 03:24
поделиться

Это должен быть класс 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 (...) {

}
3
ответ дан 8 December 2019 в 03:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: