Чтение текстового файла с помощью BufferedReader и Scanner

Мне нужно прочитать первые n строки текстового файла как строки (каждая строка может содержать или не содержать пробелы). Оставшаяся часть текстового файла содержит неизвестное число N токенов, разделенных пробелами (разделители представляют собой смесь пробелов, символов табуляции и символов новой строки, все они должны быть обработаны то же, что разделители).

Я умею читать строки с помощью BufferedReader. Я знаю, как читать токены с помощью Scanner. Но как мне объединить эти два разных режима чтения для одного текстового файла вышеописанным способом?


person Jean-François Corbett    schedule 03.10.2011    source источник
comment
Можете ли вы дать нам код, что вы пробовали и что не работает?   -  person MasterCassim    schedule 03.10.2011
comment
Я думаю, что мой вопрос довольно ясен. Нет никакого примера кода, кроме, может быть, пары операторов инстанцирования.   -  person Jean-François Corbett    schedule 04.10.2011


Ответы (1)


Вы можете использовать Scanner для обеих задач. См. Scanner.nextLine. метод.

Если вам действительно нужно использовать и BufferedReader, и Scanner, вы можете просто сделать это следующим образом:

byte[] inputBytes = "line 1\nline 2\nline 3\ntok 1 tok 2".getBytes();
Reader r = new InputStreamReader(new ByteArrayInputStream(inputBytes));

BufferedReader br = new BufferedReader(r);
Scanner s = new Scanner(br);

System.out.println("First line:  " + br.readLine());
System.out.println("Second line: " + br.readLine());
System.out.println("Third line:  " + br.readLine());

System.out.println("Remaining tokens:");
while (s.hasNext())
    System.out.println(s.next());

Вывод:

First line:  line 1    // from BufferedReader
Second line: line 2    // from BufferedReader
Third line:  line 3    // from BufferedReader
Remaining tokens:
tok                    // from Scanner
1                      // from Scanner
tok                    // from Scanner
2                      // from Scanner
person aioobe    schedule 03.10.2011
comment
Я согласен, объединение двух значительно увеличивает сложность. Использование Scanner.nextLine() и последующее разбиение строки на регулярное выражение даст вам элементы для добавления в список в очень нескольких строках красивого, поддерживаемого кода! - person spikeheap; 03.10.2011
comment
Я не вижу, где расщепление вступит в игру, хотя. - person aioobe; 03.10.2011
comment
+1 Все эти вещи кажутся такими очевидными теперь, когда ты их выкладываешь! Спасибо. - person Jean-François Corbett; 04.10.2011