Почему я не могу прочитать вторую строку при использовании второго экземпляра сканера? Я получаю «java.util.NoSuchElementException: строка не найдена».
Я понимаю, что должен использовать hasNextLine() и избежать исключения, но мой вопрос: почему вторая строка вообще недоступна? Кроме того, причина наличия нескольких экземпляров сканера заключается в том, что на самом деле сканер создается в методе, который вызывается несколько раз, и я не ищу там решения или исправления.
Обратите внимание, что я не закрываю ни сканеры, ни потоки. С помощью сканеров я читаю только по 1 строке, а в потоке у меня 3 строки.
Вот моя упрощенная программа:
private void scanLines() {
String input = "Line 1." + System.lineSeparator()
+ "Line 2." + System.lineSeparator()
+ "Line 3." + System.lineSeparator();
ByteArrayInputStream bais = new ByteArrayInputStream(input.getBytes());
Scanner scanner1 = new Scanner(bais);
System.out.println(scanner1.nextLine());
Scanner scanner2 = new Scanner(bais);
System.out.println(scanner2.nextLine());
}
Выход:
Line 1.
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at ScannerTest.scanLines(ScannerTest.java:23)
at ScannerTest.main(ScannerTest.java:6)
available()
после чтения с первого сканера. - person Pshemo   schedule 07.04.2017nextLine()
продвигает позицию потока на 1024 байта. Вот почему второй сканер вызывает исключение. Как вы думаете, стоит ли повторно открыть этот вопрос после моего ответа или мне следует переместить его в множественные сканеры Java? - person freedev   schedule 07.04.2017