HashMap 中的 ArrayIndexOutOfBoundException

ArrayIndexOutOfBoundException in HashMap

public class ReadToHashmap {
public static void main(String[] args) throws Exception {
    Map<String, String> map = new HashMap<String, String>();
    BufferedReader in = new BufferedReader(new FileReader("example.tab"));
    String line = "";
    while ((line = in.readLine()) != null) {
        String parts[] = line.split("\t");
        map.put(parts[0], parts[1]);
    }
    in.close();
    System.out.println(map.toString());
 }
}

HashMap 中插入带有值的键时,我收到 ArrayIndexOutOfBoundException 异常:-

map.put(parts[0], parts[1]);
String parts[] = line.split("\t");

因为您期望每个输入 String 将由制表符 space 分隔。但至少一个输入不会发生这种情况。请检查输入。这就是为什么你在这里得到一个例外。

map.put(parts[0], parts[1]);

要调试它,您可以在将它们放入 HashMap 之前将内容 (line) 和长度 (parts.length) 打印到 System.out

也许你可以替换

map.put(parts[0], parts[1]);

if(parts!=null && parts.length>=2)  
   map.put(parts[0], parts[1]);

您正在尝试将 linetab 拆分,并且可以肯定它们不会被拆分,这就是为什么它给您 ArrayIndexOutOfBoundException in HashMap

如果你正在使用任何 IDE 然后调试它。

并确保 TAB 等于 4-spaces 而不是 2-spaces 正如你提到的,这是不拆分的原因。

更新

除了你的问题之外,如果你是从某种逻辑中获取它的,那么在使用集合数组之前总是使用空值检查和大小检查,因为你需要最小长度为 2。

 while ((line = in.readLine()) != null) {
        String parts[] = line.split("\t");
        map.put(parts[0], parts[1]);
    }

宁愿使用

while ((line = in.readLine()) != null) {
        String parts[] = line.split("\t");
        if(parts!=null && parts.length>=2){
            map.put(parts[0], parts[1]);
        }
    }