2016-08-10 50 views
1

所以我正在读取一个CSV文件,如果一切都是字符串的话就可以正常工作。但是,当我尝试解析文件中的整数时,它不再有效。线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“1”

Scanner scanner = new Scanner(new File("top250.csv")); 
    scanner.useDelimiter(","); 

    while(scanner.hasNextLine()){ 
     String line = scanner.nextLine(); 
     System.out.println(line); 

     String[] parts = line.split(","); 
     String rank = parts[0].trim(); 
     System.out.println(rank); 
     int real_rank = Integer.parseInt(rank); 
} 

输出:

1, The Shawshank Redemption ,9.2,1994 
1 
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 movieranker.MovieRanker.createData(MovieRanker.java:45) 
at movieranker.MovieRanker.main(MovieRanker.java:25) 
+0

没有您的代码错误,只是scanner.useDelimiter(“,”);很奇怪。使用这将给每一行一个部分。所以我很确定代码和输出不匹配。请重新检查并编辑! –

+0

“1”有多少个字符?也许有一些额外的没有可打印的字符,你不能粘贴不被trim()捕获。 –

+0

只是为了检查,你可以发送你的完整代码吗? –

回答

2

java.lang.NumberFormatException表示该应用程序试图将字符串转换为数字类型之一,但该字符串不具有相应的格式。

发生此异常是因为在只输入一个数字的情况下,生成的实际字符串可能有一些不可见的字符,而不是"1"。因此,格式不正确。一个简单的修正是:

int real_rank = Integer.parseInt(rank); 

到:

线从改变

rank = rank.replaceAll("[^0-9]+", "") 
int real_rank = Integer.parseInt(rank); //remove everything non-digit from your input, including \n symbols 
+0

@DominikK也许一些看不见的charachters被留下。试试这个。如果它不起作用,我不能重现问题。 –

+0

这工作!谢谢! – Dylan

+1

不可见的字符是[零宽度不间断空间](http://unicode-table.com/en/FEFF/)。 – 4castle

0

嗨,我想是因为你的数据文件包含一个UTF-8 BOM.

你有三个选择: 编辑您的源数据文件以删除BOM,或者您可以添加一些代码来处理BOM。对于第一个选项,使用Notepad ++并删除BOM。 或使用可以处理它的Libarie ..我喜欢http://www.univocity.com/pages/about-parsers

相关问题