1

適切なゲッターとセッターメソッドを使用して、このように定義されたクラスがあります...

public class Album {
    private int id;
    private String artist;
    private String name;
    private int published;
}

このコンテンツを多数のアルバムに保存する .csv ファイルもあります。このファイルでは、1 行が 1 つのアルバムを表します。

.csv ファイルから情報を読み取り、Albumクラスのセッターを使用して値を割り当てようとしています。これが私のコードです...

public Map<Integer, Album> load() {

    Scanner scanner = new Scanner(fileName);
    Map<Integer, Album> loadedAlbums = new HashMap<Integer, Album>();

    while(scanner.hasNextLine()) {
        Album album = new Album();

        String[] albumDivided = scanner.nextLine().split(","); 
        //in the .csv file every unit of information is divided by a comma.

        album.setId(Integer.parseInt(albumDivided[0])); //this is line 11.
        album.setArtist(albumDivided[1]);
        album.setName(albumDivided[2]);
        album.setPublished(Integer.parseInt(albumDivided[3]));

        loadedAlbums.put(album.getId(), album);

    }

    return loadedAlbums;
}   

ただし、このコードを使用しようとすると、次の例外が発生します。

java.lang.NumberFormatException: 入力文字列の場合: 11 行目の「albums.csv」。

この問題の原因を理解するのを手伝ってください。

4

3 に答える 3

1

さて、問題は例外によってあなたに説明されます...

Aは、あなたの回線NumberFormatExceptionの1つによってトリガーされたはずです。Integer.parseInt()例外をトリガーしているコードの行は11行目です(例外メッセージによる)-これがどれであるかはわかりませんが、おそらく最初のInteger.parseInt()行です。

あなたのコードは値「albums.csv」を数値に変換しようとしていますが、明らかにそうではありません。したがって、CSVファイルのどこかに、数値を期待している値albums.csvを含む行が必要です。

これが問題の特定に役立つことを願っています。

于 2012-04-11T13:29:37.207 に答える
1

ここでの解決策全体は必要ないので、問題を解決するためのヒントがあります。

ScannerクラスのAPIドキュメントを確認する必要があります。(コードで使用するときに)単一のStringパラメーターを期待するコンストラクターをよく見てください。

于 2012-04-11T13:32:57.357 に答える
1

私が知る限り、albumDivided[0] には「1」が含まれます。ドットのために整数に解析できません。csv ファイルからドットを削除するか、整数に解析する前にドットを削除する新しい文字列を作成します。アプローチは次のようになります。

String newString;
for(int i=0;i<albumDivided[0].length-1;i++){ //length -1 to remove the dot
   newString = newString + albumDivided[0].charAt(i); //get the string stored in albumDivided[0] and add each char to the new string
}
于 2012-04-11T13:42:52.927 に答える