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

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

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

输入文件是CSV文件,文件的第一个条目是整数。 当我开始解析时,我立即获得此exception:

 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上运行。 欢迎任何建议在哪里寻找问题。

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

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

所以这就是问题,使用适当的读取器来使用文件进行转换(UTF-8,UTF-16 big-endian,UTF-16 little-endian等)文件的编码。 有关使用Java读取Unicode文件的更多信息,请参阅此问题及其答案 。