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]);
我不明白为什么它会给我这样的例外
答案 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);
}