0

ハッシュマップを使用してファイルを読み取って保存しようとしていますが、「java.lang.ArrayIndexOutOfBoundsException: 0」というエラーが発生します。私の入力には、名前 ID のようなスペースで区切られた 2 つの列があり、エントリが異なります。助けていただければ幸いです。ありがとう。

入力:

Mary ID
Mary Lastname
Mary Place
Mary DOB
Mary Homepage
Mary Postcode
John ID
John Lastname
John Place
John DOB
John Homepage
John Postcode

コード:

import java.util.*;

class ReadFileAndStoreHashmap {
    public static void main(String[] args)  {
        try{
            Scanner scanner = new Scanner(new FileReader(".txt"));

            HashMap<String, String> map = new LinkedHashMap<String, String>();

            while (scanner.hasNextLine()) {
                String[] columns = scanner.nextLine().split(" ");
                map.put(columns[0], columns[1]);
                System.out.println(map);
            }
        }
        catch (Exception e) {
            System.out.println(e.toString());
        }
    }
}
4

3 に答える 3

3

スキャンしようとしている行を確認します。空白であると思われるため、スキャナーは必要に応じて分割できません。

返された配列の長さをアサート/チェックすることをお勧めします。2 つの要素がない場合は、これを簡単に報告して、必要に応じて続行または中断し、何が問題なのかをユーザーに報告できます。

于 2012-07-25T15:52:39.507 に答える
2

ほとんどの場合、どこかに空行があります (ファイルの末尾に改行がありますか? その後に空行がある可能性があります)。

のようなチェックを追加します

if(columns.length == 2) 
于 2012-07-25T15:54:23.333 に答える
0

個人的には BufferedReader を使用することを好みます。

これが私の提案です:

try {
    String line;
    BufferedReader filestart = new BufferedReader(new FileReader(file));
    for (line = filestart.readLine(); line !=null; line = filestart.readLine()) {

          String[] columns = line.split(" ");
          map.put(columns[0], columns[1]);
          System.out.println(map);

    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

「line != null」を使用すると、試行する前に確実に行を分割できるようになります。

于 2012-07-25T16:07:56.150 に答える