【发布时间】:2015-03-04 20:43:16
【问题描述】:
所以我使用扫描仪来读取文件。但是我不明白,如果文件是 UTF-8 文件,并且在迭代文件时读取的当前行包含一个数字,则方法 Character.isDigit(line.charAt(0)) 返回 false。但是,如果文件不是 UTF-8 文件,则该方法返回 true。
这里有一些代码
File theFile = new File(pathToFile);
Scanner fileContent = new Scanner(new FileInputStream(theFile), "UTF-8");
while(fileContent.hasNextLine())
{
String line = fileContent.nextLine();
if(Character.isDigit(line.charAt(0)))
{
//When the file being read from is NOT a UTF-8 file, we get down here
}
当使用调试器并查看line 字符串时,我可以看到在这两种情况下(无论是否为UTF-8 文件),字符串似乎都包含相同的数字。为什么会这样?
【问题讨论】:
-
你调试了吗?
line.charAt(0)没有按照您的预期返回什么字符? -
line.charAt(0)在使用 UTF-8 文件时不返回任何内容,这就解释了为什么 Character.isDigit 当然不返回 true。但是为什么line.charAt(0)什么都不返回呢? -
没有发生。也就是说,您通过读取一个文件获得的
String与您通过读取另一个文件获得的不一样。一旦你把这条线变成String形式,Java 就不会知道或关心其中的chars 来自哪里。调试时,查看chars 的整数值,而不是它们的图形表示,当然也不是整个字符串的图形表示。 -
String.charAt(0)只能通过抛出异常无法返回任何内容。当您在调试器中查看它们时,我很难想象这与似乎包含相同内容的字符串保持一致。此外,它与Character.isDigit(line.charAt(0))返回false不一致,正如您所声称的那样。 -
您的文件是否包含(意外)BOM?
标签: java utf-8 filestream chars