线程 "main" java.lang.NumberFormatException 中的异常:对于输入字符串:“1”

Exception in thread "main" java.lang.NumberFormatException: For input string: "1"

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

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

您好,我想是因为您的数据文件包含 UTF-8 BOM.

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