所以我正在读取一个CSV文件,如果一切都是字符串,它可以正常工作。但是,当我尝试从文件中解析整数时,它将不再起作用。
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 :(得分: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
答案 1 :(得分:0)
您好,我认为因为您的数据文件包含UTF-8 BOM.
您有三种选择: 编辑源数据文件以删除BOM,或者您可以添加一些代码来处理BOM。对于第一个选项,请使用Notepad ++并删除BOM。 或使用可以处理它的Libarie ..我喜欢http://www.univocity.com/pages/about-parsers