2015-10-14 2 views
-2
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(); 

Я пытаюсь пересечь две хэш-карты. Каждая хэш-карта получает свои данные из файла, который имеет в основном два столбца.ArrayIndexOutofBoundException в HashMap для setintersection

его дает мне arrayindexout связанного исключения в строке no: -14 i.e map1.put (столбцы [0], столбцы [1]);

я не понимаю, почему это дает мне такое исключение

+0

Исключение в потоке "основного" java.lang.ArrayIndexOutOfBoundsException: 1 \t в swap.main (swap.java:14) а именно: - map1.put (столбцы [0], столбцы [1]); –

+0

отредактируйте этот вопрос. код не полностью сформирован, нет stacktrace, даже немного описания о точной проблеме ... – Paul

+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 в этом случае.

В качестве этапа отладки, возможно, распечатайте и проверьте данные до того, как вы получите доступ к значению на этих массивах.

или попытайтесь захватить блок и под блоком выловов распечатать строку ввода, где она падает.

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); 
} 
+0

Спасибо Bro .... я нашел свою ошибку ... это было только из-за файла, в котором каждая следующая строка была пуста ... –

Смежные вопросы