Java 扫描仪在大约2400个字符后切断了我的字符串

Java 扫描仪在大约2400个字符后切断了我的字符串,java,string,java.util.scanner,Java,String,Java.util.scanner,我有一些非常基本的代码,比如 while (scan.hasNextLine()) { String temp = scan.nextLine(); System.out.println(temp); } 其中,“扫描”是对文件的扫描 然而,在一行约6k字符长的特殊行中,temp在2470个字符后被截断。当它停止时没有什么特别的;它在“澳大利亚”这个词的中间,如果我从行中删除字符,它会删掉改变的地方;e、 g.如果我删除文件中的字符0-100,则扫描仪将获得以前的100-257

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

while (scan.hasNextLine())
{
    String temp = scan.nextLine();
    System.out.println(temp);
}
其中,“扫描”是对文件的扫描

然而,在一行约6k字符长的特殊行中,temp在2470个字符后被截断。当它停止时没有什么特别的;它在“澳大利亚”这个词的中间,如果我从行中删除字符,它会删掉改变的地方;e、 g.如果我删除文件中的字符0-100,则扫描仪将获得以前的100-2570


我以前使用过较大字符串的扫描仪。你知道会出什么问题吗?

猜猜看,你的临界点可能是一个流氓角色:在十六进制编辑器中查看文件,而不仅仅是文本编辑器。也许在字符串的中间有一个嵌入的空字符,或者可能是<代码> \r>代码>。在我看来,
Scanner.nextLine()
不太可能随意将其切碎

另一个想法是,你100%确定它不全在那里吗?也许System.out.println正在截断字符串-又是因为其中嵌入了一些“奇数”字符?如果打印
temp.length()
,会发生什么情况

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

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

如果所有这些都失败了,我只需要调试到Scanner.nextLine()-Java的一个优点是可以调试到标准库中。

当我打印长度时,它肯定不存在。对于上下文,这是一个从Excel导出的.csv文件,我正在vim中编辑它。我觉得里面没有什么特别的人物;正如我所说,如果我删除字符,截止点就会改变。所以,当它在“澳大利亚”中间被删掉的时候,如果我在“澳大利亚”、“澳大利亚”和接下来的90个字符之前删除某处的一百个字符就可以了。下一行也会发生同样的情况,只是它在112而不是2470处截断。这是唯一两条行不通的线路。有些行更长。只需在十六进制编辑器中查看一下,就可以了,只有ascii值。第二行在“t”和撇号之间剪切。@Ventrue:LOL-我刚刚添加了一个编辑,使用十六进制编辑器重新进行了筛选。嗯,我已经添加了一些其他的建议-但是“调试到它中”可能是你需要的…哦,天哪,这是字符集。它读取的是ASCII,文件是ISO-LATIN。非常感谢。@Ventrue:Woot!诚然,这是一种非常奇怪的失败模式——撇号是非ASCII的吗?