0

我正在尝试读取文件并使用哈希图存储它,但是出现此错误“java.lang.ArrayIndexOutOfBoundsException:0”。我的输入有两列,由空格分隔,例如名称 ID 等,具有不同的条目。帮助表示赞赏。谢谢。

输入:

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