【问题标题】:ArrayIndexOutOfBoundException in HashMapHashMap 中的 ArrayIndexOutOfBoundException
【发布时间】:2015-10-13 03:22:20
【问题描述】:
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]);

【问题讨论】:

  • 在假设它至少有两个元素之前,您似乎没有检查parts 数组中的元素数量。
  • 问题标题具有误导性,因为ArrayIndexOutOfBoundException 不是由HashMap 的任何方法引发的,而是由在某些情况下长度小于2 的字符串数组parts[] 引发的。

标签: java indexoutofboundsexception


【解决方案1】:
String parts[] = line.split("\t");

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

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

要对此进行调试,您可以将内容 (line) 和长度 (parts.length) 打印到 System.out,然后再将它们放入 HashMap

【讨论】:

  • 实际上我有一个文件,在运行算法后,它会在 2 列中给我输出,但列中的数据会有所不同。例如:--第一行12 1212 第二行1213123 213321。中间有两个空格
  • 你能提供一些列如何变化的示例吗?
【解决方案2】:

也许你可以替换

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

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

【讨论】:

    【解决方案3】:

    您正在尝试将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]);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-27
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      相关资源
      最近更新 更多