输入字符串"1"的java.lang.NumberFormatException

Mil*_*vic 25 java encoding parsing

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

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

输入文件是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)
Run Code Online (Sandbox Code Playgroud)

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

T.J*_*der 36

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

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

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