2016-08-10 5 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( "、");奇妙です。これを使うと、すべての行に1つのセクションが与えられます。だから私はかなりコードと出力が一致していないことを確認しています。再チェックして編集してください! –

+0

"1"は何文字ですか?多分、あなたが貼り付けることができない印刷可能な文字がいくつかあります。それはtrim()によって捕らえられません。 –

+0

チェックするだけで、完全なコードを送ってください。 –

答えて

2

java.lang.NumberFormatExceptionは、アプリケーションが文字列を数値型に変換しようとしましたが、文字列は適切な形式を持っていないことをしていることを示しています。

この例外は、数字のみを入力した場合、実際に生成される文字列には、目に見えない文字が含まれ、"1"ではないことが原因で発生します。したがって、形式が正しくありません。簡単な修正は次のようになります。あなたは3つの選択肢を持っている私はあなたのデータファイルがUTF-8 BOM.

含まれているためだと思う

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

@DominikKおそらくいくつかの目に見えないキャラクターが残っています。代わりにこれを試してください。それが動作しない場合、私は問題を再現することはできません。 –

+0

これは機能しました!ありがとうございました! – Dylan

+1

目に見えない文字は、[幅ゼロの改行なしのスペース](http://unicode-table.com/en/FEFF/)でした。 – 4castle

0

こんにちは: を

int real_rank = Integer.parseInt(rank); 

へ:

ラインから変更しましたソースデータファイルを編集してBOMを削除するか、BOMに対応するコードを追加することができます。最初のオプションはNotepad ++を使用し、BOMを削除します。 またはそれを処理できるLibarieを使用してください。私は好きです。http://www.univocity.com/pages/about-parsers

関連する問題