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]);
发布于 2015-10-12 19:25:18
String parts[] = line.split("\t");
因为您期望每个输入String
将由制表符空间分隔。但这种情况不会发生在至少一项投入上。请检查输入。这就是为什么你在这里得到了一个例外。
map.put(parts[0], parts[1]);
要调试这一点,您可以将内容(line
)和长度(parts.length
)打印到System.out
,然后再将它们放入HashMap
中。
发布于 2015-10-12 20:41:21
也许你可以代替
map.put(parts[0], parts[1]);
使用
if(parts!=null && parts.length>=2)
map.put(parts[0], parts[1]);
发布于 2015-10-12 20:51:44
您正在尝试将line
与tab
分开,而且它们肯定不是被分割的,这就是为什么它给了您ArrayIndexOutOfBoundException in HashMap
。
如果您正在使用任何IDE,那么请调试它。
并确保TAB
等于4-空格而不是2-空格,这就是为什么它没有分裂的原因。
更新
除了您的问题之外,在使用集合数组之前,请始终使用空检查和大小检查,如果您是从某个逻辑获得的,因为您需要最小长度为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]);
}
}
https://stackoverflow.com/questions/33093560
复制