输入字符串“1”的java.lang.NumberFormatException

时间:2016-09-26 11:07:50

标签: java parsing encoding

所以,我有一个真正困扰我的问题。我有一个简单的解析器,我在java中。以下是相关代码:

while( (line = br.readLine())!=null)
{
    String splitted[] = line.split(SPLITTER);
    int docNum = Integer.parseInt(splitted[0].trim());
    //do something
}

输入文件是CSV文件,文件的第一个条目是整数。当我开始解析时,我会立即得到这个例外:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at dipl.parser.TableParser.parse(TableParser.java:50)
at dipl.parser.DocumentParser.main(DocumentParser.java:87)

我检查了文件,确实有1作为它的第一个值(该字段中没有其他字符),但我仍然收到消息。我认为这可能是因为文件编码:它是UTF-8,带有Unix端线。该程序在Ubuntu 14.04上运行。欢迎任何建议在哪里寻找问题。

1 个答案:

答案 0 :(得分:36)

你的号码前面有一个BOM;如果我在您的问题中复制了"1"的内容并将其粘贴到vim,我会看到前面有一个FE FF(例如,BOM)。从那个链接:

  

构成BOM的确切字节将是通过该转换格式转换为Unicode字符U + FEFF的任何内容。

这就是问题所在,使用适当的读取器使用该文件进行转换(UTF-8,UTF-16 big-endian,UTF-16 little-endian等)文件编码。有关使用Java读取Unicode文件的更多信息,另请参阅this question and its answers