Scannerの2番目のインスタンスを使用して2行目を読み取ることができないのはなぜですか?私は "java.util.NoSuchElementException:No line found"を取得します。java.util.Scanner 2番目のインスタンスがNoSuchElementExceptionをスローする
私はhasNextLine()を使用して例外を回避すべきだと理解していますが、私の質問はなぜ2行目が利用できないのでしょうか?また、複数のスキャナインスタンスが存在する理由は、実際にはスキャナが複数回呼び出されるメソッドでインスタンス化されているため、そこに解決策や修正を探すのではないからです。
スキャナまたはストリームのいずれも閉じていないことに注意してください。私はストリームに3行を持っている間、スキャナを使ってそれぞれ1行しか読んでいません。ここで
は、私のプログラムが簡略化されている:
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)
同じストリームで2つのスキャナを使用したことはありません – freedev
文字列の行を読みたいときに、なぜByteArrayInputStreamを使用していますか? – GhostCat
同じスキャナを使用する – Hackerman