2015-10-13 36 views
2
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例外: -ArrayIndexOutOfBoundException在HashMap中

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

你似乎沒有被檢查假定它有至少前'parts'數組中元素的個數兩個要素。 –

+0

問題標題誤導爲'ArrayIndexOutOfBoundException'不是由'HashMap'的任何方法拋出,而是由字符串數組''[''''在某些情況下其長度小於2「)拋出。 – ares

回答

3
String parts[] = line.split("\t"); 

因爲你期待每個輸入String將由選項卡分離空間。但至少有一個輸入不會發生。請檢查輸入。這就是爲什麼你在這裏得到一個例外。

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

要調試這一點,你可以只是把它們放入HashMap之前打印的內容(line)和長度(parts.length)到System.out

+0

實際上我有一個文件,通過一個算法運行,它使我輸出2列,但列中的數據各不相同。例如: - 第一行121212第二行1213123 213321. –

+0

之間有兩個空格您能否提供一些有關列如何變化的示例? – YoungHobbit

0

也許你可以用

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

您正試圖將linetab分裂取代

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

,並知道爲什麼它是給你ArrayIndexOutOfBoundException in HashMap他們沒有被splited多數民衆贊成。

如果您使用任何IDE然後調試它。

,並確保TAB等於4位沒有2位正如你所說,這就是爲什麼它不splited的原因。

更新

除了您的問題,總是用null檢查和尺寸檢查使用集合的陣列之前,如果你是從一些邏輯得到它,因爲你需要的最小長度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]); 
     } 
    }