gpt4 book ai didi

java.util.Scanner 第二个实例抛出 NoSuchElementException

转载 作者:太空宇宙 更新时间:2023-11-04 11:35:57 31 4
gpt4 key购买 nike

为什么我无法读取使用第二个 Scanner 实例的第二行?我收到“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)

最佳答案

使用多个扫描仪(在同一流上)是一种非常糟糕的做法,因为扫描仪会消耗它们共享的流。

这是您遇到的异常 java.util.NoSuchElementException: No line found 的原因。

我已经测试了您的代码,第二次 nextLine() 调用引发了异常。

每个 Scanner 类中都保存了对同一输入流的引用。

当调用 scanner1.nextLine() 方法时,会读取流上的一堆字节,并将位置向前移动。

需要明确的是,我已经仔细检查了 Scanner 类的源代码的调试。

当调用 nextLine() 方法时,流在幕后移动到 1024 个位置之前,并将结果复制到缓冲区

// Internal buffer used to hold input
private CharBuffer buf;

尝试自己调试Java源码,看看方法readInput() .

关于java.util.Scanner 第二个实例抛出 NoSuchElementException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43279825/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com