Pourquoi ne puis-je pas lire la deuxième ligne sur l'utilisation de la deuxième instance de Scanner? J'obtiens un "java.util.NoSuchElementException: Aucune ligne trouvée".java.util.Scanner deuxième instance lancer NoSuchElementException
Je comprends que je devrais utiliser le hasNextLine() et évité l'exception, mais ma question est pourquoi la deuxième ligne ne serait pas disponible du tout? En outre, la raison pour laquelle il existe plusieurs instances de scanner est que, en réalité, le scanner est instancié dans une méthode appelée plusieurs fois, et je ne cherche pas de solution ou de solution.
Veuillez noter que je ne ferme ni les scanners ni les flux. Je ne lis que 1 ligne chacun en utilisant les scanners, alors que j'ai 3 lignes dans le flux.
Voici mon programme simplifié:
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());
}
sortie est:
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)
N'utilisez jamais deux scanners sur le même flux – freedev
Et pourquoi utilisez-vous un ByteArrayInputStream lorsque vous voulez lire des lignes de caractères ?! – GhostCat
Il suffit d'utiliser le même scanner – Hackerman