线程" main"中的例外情况java.lang.NumberFormatException:对于输入字符串:" 1"

时间:2016-08-10 20:05:13

标签: java csv parsing int java.util.scanner

所以我正在读取一个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)

2 个答案:

答案 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