我正在使用.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
您发生错误是因为您仅用“,”分割了字符串,所以每个逗号后面的每个空格都在StudentData中注册为单独的字符串。要解决此问题,您可以使用如下正则表达式:
String[] studentData = line.split(", (\")?");
为什么不使用分割代码(\“,\” | \“,|,\” |,)。