gpt4 book ai didi

java.util.Scanner NoSuchElementException 且 LineFeed 终止文件长度为 1025 个字符

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:37 25 4
gpt4 key购买 nike

我不明白为什么会收到 NoSuchElementException。我正在阅读的文件是以 LF 结尾的,并且该代码已经在生产环境中运行了一年。在调试过程中,我的同事发现,当文件以 LF 结尾并且长度恰好为 1025 个字符(尽管原始文件的长度为 10132 个字符)时,您可以重现该错误。此错误在 Linux 和 Windows 上都会重现,我尝试了 JDK 1.6.0_30、JRE 1.7 和 JDK 1.7.0_07。如果将模式更改为“~$?”或“~\r?\n?”错误消失了。

public static void main(String[] args) throws FileNotFoundException {
String filepath = "file.txt";
Scanner s = null;
try {
s = new Scanner(new File(filepath));
s.useDelimiter(Pattern.compile("~\n?", Pattern.UNIX_LINES));
while (s.hasNext()) {
System.out.println(s.next());
}

} finally {
if (s != null)
s.close();
}
}

任何建议表示赞赏。

谢谢!

编辑1
我刚刚尝试了 Scanner 的 GNU 类路径实现那个版本的扫描仪工作得很好。

最佳答案

所以只是为了结束这个...如果您的扫描仪模式以可选的换行符\n 结尾?您可能会收到 NoSuchElementException。问题在于 Scanner 的实现,但有简单的解决方法:

  • 扫描行并应用不带 \n? 的正则表达式
  • 使用 (?:\r?\n?) 结束扫描;这是有效的,因为它强制扫描器在缓冲区中提取更多字符,跳过边缘情况。
  • 结束扫描 $?;这会检测行尾,但不会选择插入符号返回/新行。

关于java.util.Scanner NoSuchElementException 且 LineFeed 终止文件长度为 1025 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16594918/

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