用于setintersection的HashMap中的ArrayIndexOutofBoundException

时间:2015-10-14 01:57:56

标签: java indexoutofboundsexception

class swap {
public static void main(String[] args) throws FileNotFoundException {
    Scanner s1 = new Scanner(new FileReader("C:/Users/USER/Desktop/Saumil/Saumil/FP.data"));
    Scanner s2 = new Scanner(new FileReader("C:/Users/USER/Desktop/Saumil/Saumil/FP1.data"));
    HashMap<String, String> map1 = new HashMap<String, String>();
    HashMap<String, String> map2 = new HashMap<String, String>();
    while (s1.hasNextLine()) {
        String[] columns = s1.nextLine().split("");
        System.out.println("hi");
        map1.put(columns[0], columns[1]);
    }
    while (s2.hasNextLine()) {
        String[] columns = s2.nextLine().split("");
        System.out.println("123");
        map1.put(columns[0], columns[1]);
    }

    System.out.println(map1);
    try {
    //Map result = new HashMap();

        Set<String> s = new HashSet<String>(map1.keySet());
        System.out.println("1234");
        s.retainAll(map2.keySet());
        System.out.println(s);


        FileOutputStream fos = new FileOutputStream("C:/Users/USER/Desktop/Saumil/Saumil/output.txt");
        ObjectOutputStream oos = new ObjectOutputStream(fos);   
        oos.writeObject(s); // write list to ObjectOutputStream
        oos.close(); 
        System.out.println("hi");
    } catch(Exception ex) {
        ex.printStackTrace();
    }
    //Collection intersection=CollectionUtils.intersection(map1.keySet(),map2.keySet());
    s1.close();
    s2.close();

我正在尝试将两个哈希map相交。每个哈希映射从基本上有两列的文件中获取其数据。

它在第0行给出了arrayindexoutof绑定异常:-14 即map1.put(columns [0],columns [1]);

我不明白为什么它会给我这样的例外

1 个答案:

答案 0 :(得分:1)

我检查您的数据文件并验证他们的数据格式是否正确。 我的猜测是他们有一些不正确的数据。 您正在通过执行

创建一个字符串对象数组
String[] columns = s1.nextLine().split("");

并且您希望此数组中包含2个字符串对象。但是,如果文件的行不好,情况可能并非总是如此。

例如,文件中的一行可能是这样的(第3行)

1 col1value1   col1value2
2 col2value1   col2value2
3 col3value1
4 col4value1   col4value2

当您将每一行转换为数组对象时,它会在文件上每行生成一个数组。然而,当它到达第3行时,它将生成一个包含一个对象的数组。

当您尝试访问

columns[1]

在这种情况下,它会抛出java.lang.ArrayIndexOutOfBoundsException。

作为调试步骤,可能在访问这些数组上的值之前打印并检查数据。

或者尝试使用catch块并在catch块下面打印出它所在的输入行。

String tmpStr1 = "";

try {
     tmpStr1 = s1.nextLine();
     columns = tmpStr1.split("");
     //access array items
}
catch (ArrayIndexOutOfBoundsException aEx) {

    System.out.println(aEx.getMessage());
    //print the whole like that was read from the file
    //this will help you to understand what went wrong
    System.out.println(tmpStr1);
}