【发布时间】:2020-05-15 06:13:35
【问题描述】:
我正在使用 .substring 从文本文件中读取字符串的特定部分。这是要读取的字符串示例:
2093505,"AMBROS, RALPH HENRY B",BS Entrep 1,M,23,93.94
我们应该忽略引号,这就是我使用子字符串的原因。但是当我运行程序时,我得到了这个错误:
java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
at edu.slu.prog2.finals2.VidezStudentsRecords.readDataFileIntoList(VidezStudentsRecords.java:54)
at edu.slu.prog2.finals2.VidezStudentsRecords.run(VidezStudentsRecords.java:29)
at edu.slu.prog2.finals2.VidezStudentsRecords.main(VidezStudentsRecords.java:21)```
这是错误所在的代码:
List<Student> students = new ArrayList<>();
BufferedReader buffy = new BufferedReader(new FileReader (filename));
while(true){
String line = buffy.readLine();
if(line == null){
break;
}
String[] studentData = line.split(",");
System.out.println(studentData[0]);
String id = studentData[0];
String lastName = studentData[1].substring(1);
String firstName = studentData[2].substring(1, studentData[2].length() - 1);
String program = studentData[3].substring(0, studentData[3].length() - 2);
byte year = Byte.parseByte(studentData[3].charAt(studentData[3].length() - 1) + "");
char gender = studentData[4].charAt(0);
int age = Integer.parseInt(studentData[5]);
double average = Double.parseDouble(studentData[6]);
//System.out.println(id + " ");
//System.out.print(lastName + " " + firstName + " " + program + " " + year + " " + gender + " " + age + " " + average);
Student student = new Student(id, lastName, firstName, program, year, gender, age, average);
students.add(student);
}
buffy.close();
return students;
}
我可以很好地打印细节。它们按顺序显示,但它仍然给我所有详细信息(id、名称、年份等)的 OutofBounds 错误。我哪里错了?
样本输出:
2093505 AMBROS RALPH HENRY B BS Entrep 1 M 23 93.94
2091931 BALIAGA ALEJANDRO A BS Entrep 1 M 18 81.11
2093231 BALTAZAR JEROME S BS Entrep 1 M 22 69.37
【问题讨论】:
-
VidezStudentsRecords.java:54写的是什么?你的意思是你可以很好地打印数据,尽管它会抛出?你有可能捕捉到异常吗?否则你的代码将无法继续,一旦发生异常就会结束程序。 -
上面的代码是VidezStudentsRecords.java的吗?第 54 行是哪一行?
-
顺便说一句,与 2093505,"AMBROS, RALPH HENRY B",BS Entrep 1,M,23,93.94 它嵌入了逗号(在“...,.. .") 所以你最好使用合适的 csvReader
-
您提供的示例数据无法重现此调试问题。请阅读帖子how create minimal reproducible example。您应该使用
try/catch块并在catch然后打印导致此问题的输入行
标签: java list bufferedreader