我正在尝试从文本文件中读取,但是我收到此错误,我无法弄清楚如何修复它。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
和我的代码
try {
String scan;
FileReader file = new FileReader("C:\\Users\\W7\\workspace\\Lab 8\\students.txt");
BufferedReader br = new BufferedReader(file);
while((scan = br.readLine()) != null) {
String values = scan;
String[] val = values.split("\t");
String[] vals;
vals = val[0].split(":");
int size = val.length;
System.out.println(vals[1]);
switch (size) {
case 3 :
vals = val[0].split(":");
int id = Integer.parseInt(vals[1]);
vals = vals[1].split(":");
String name = val[1];
vals = val[2].split(":");
int grade = Integer.parseInt(vals[1]);
Student st = new Student(id, name, grade);
} catch (IOException e) {
System.out.println(e.getStackTrace());
}
我的文字文件
ID:5 Name:john Grade:6
ID:6 Name:paul Grade:10
答案 0 :(得分:2)
在访问第一个或第二个元素之前,vals
的长度是未知的:
String[] vals;
vals = val[0].split(":");
System.out.println(vals[1]);
甚至在访问索引0处的元素之前,您需要通过检查其长度来确保val不是空数组。例如,当您在输入中遇到一条甚至没有标签的空行时,就会发生这种情况。
答案 1 :(得分:1)
错误是您在检查vals[1]
的长度之前使用vals
的位置。
vals = val.contains(":") ? val[0].split(":") : null;
int size = (vals == null) ? 0 : vals.length; // which is the array I think you want
System.out.println(vals[1]);
switch (size) {
...
}
答案 2 :(得分:0)
String values = scan;
String[] val = values.split("\t");
String[] vals;
vals = val[0].split(":");
int size = val.length;
System.out.println(vals[1]);
您确定上面的代码可以处理空白行吗?您假设每一行至少有一个“:”