Warum kann ich die zweite Zeile nicht lesen, wenn ich die zweite Instanz von Scanner verwende? Ich bekomme eine "java.util.NoSuchElementException: No line found".java.util.Scanner zweite Instanz wirft NoSuchElementException
Ich verstehe, ich sollte die hasNextLine() verwenden und vermieden die Ausnahme, aber meine Frage ist, warum würde die zweite Zeile überhaupt nicht verfügbar sein? Der Grund dafür, dass es mehrere Scanner-Instanzen gibt, liegt auch darin, dass der Scanner in einer Methode instanziiert wird, die mehrere Male aufgerufen wird, und ich suche dort keine Lösung oder Lösung.
Bitte beachten Sie, dass ich weder die Scanner noch die Streams schließe. Ich lese nur jeweils 1 Zeile mit den Scannern, während ich 3 Zeilen im Stream habe.
Hier ist mein Programm vereinfacht:
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());
}
Ausgang ist:
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)
Niemals jemals zwei Scanner im gleichen Stream verwenden – freedev
Und warum verwenden Sie einen ByteArrayInputStream, wenn Sie String-Zeilen lesen möchten ?! – GhostCat
Verwenden Sie einfach den gleichen Scanner – Hackerman