7

我有一些非常基本的代码,比如

while (scan.hasNextLine())
{
    String temp = scan.nextLine();
    System.out.println(temp);
}

其中 scan 是文件的扫描仪。

但是,在一个大约 6k 字符长的特定行上,temp 在大约 2470 个字符之后被切断。什么时候切断没有什么特别的。它在“澳大利亚”这个词的中间。如果我从行中删除字符,则删除的位置会发生变化;例如,如果我删除文件中的字符 0-100,那么扫描仪将得到以前的 100-2570。

我以前用过扫描仪来处理更大的字符串。知道可能出了什么问题吗?

4

1 回答 1

8

猜测一下,您可能在截止点有一个流氓角色:在十六进制编辑器中查看文件,而不仅仅是文本编辑器。也许有一个嵌入的空字符,或者可能\r在字符串的中间?在我看来,这似乎不太可能Scanner.nextLine()随意砍掉它。

另一种想法是,您是否 100% 确定它不是全部存在?也许 System.out.println 正在切断字符串 - 再次由于其中嵌入了一些“奇怪”字符?如果你打印会发生什么temp.length()

编辑:我误解了如果你删掉一些字符会发生什么。对于那个很抱歉。其他一些需要检查的事情:

  • 如果您使用BufferedReader.readLine()而不是阅读这些行Scanner,它会得到一切吗?
  • 您是否指定了正确的编码?我不明白为什么会以这种特殊方式出现,但这是值得考虑的事情......
  • 如果将行中的所有字符替换为“A”(在文件中),这会改变什么吗?
  • 如果您在此行之前添加一个额外的行(或删除它之前的一行),这会改变什么吗?

如果这一切都失败了,我只会调试Scanner.nextLine()——Java 的优点之一是您可以调试标准库。

于 2010-05-23T07:51:11.483 回答