我正在尝试读取文件并使用hashmap存储它,但是存在此错误“java.lang.ArrayIndexOutOfBoundsException:0”。我的输入有两个由空格分隔的列 名称ID如此,具有不同的条目。感谢帮助。感谢。
输入:
Mary ID
Mary Lastname
Mary Place
Mary DOB
Mary Homepage
Mary Postcode
John ID
John Lastname
John Place
John DOB
John Homepage
John Postcode
代码:
import java.util.*;
class ReadFileAndStoreHashmap {
public static void main(String[] args) {
try{
Scanner scanner = new Scanner(new FileReader(".txt"));
HashMap<String, String> map = new LinkedHashMap<String, String>();
while (scanner.hasNextLine()) {
String[] columns = scanner.nextLine().split(" ");
map.put(columns[0], columns[1]);
System.out.println(map);
}
}
catch (Exception e) {
System.out.println(e.toString());
}
}
}
答案 0 :(得分:3)
我会检查您尝试扫描的行。我怀疑它是空白的,因此扫描仪无法按需分割它。
我建议断言/检查返回数组的长度。如果它没有2个元素,那么你可以轻松地报告这个并继续或中断,同时向用户报告错误的内容。
答案 1 :(得分:2)
你很可能在某个地方有一个空行(你的文件是否以换行结束?然后可能会有一个空行。)
添加支票
if(columns.length == 2)
答案 2 :(得分:0)
我更喜欢亲自使用BufferedReader。
这是我的建议:
try {
String line;
BufferedReader filestart = new BufferedReader(new FileReader(file));
for (line = filestart.readLine(); line !=null; line = filestart.readLine()) {
String[] columns = line.split(" ");
map.put(columns[0], columns[1]);
System.out.println(map);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
拥有“line!= null”应确保在尝试之前绝对可以拆分该行。