Java给了我边界外的错误,但我仍然可以打印数组?

Java给了我边界外的错误,但我仍然可以打印数组?,java,list,bufferedreader,Java,List,Bufferedreader,我正在使用.substring从文本文件中读取字符串的特定部分。下面是要读取的字符串示例: 2093505,“安布罗斯,拉尔夫·亨利B”,英国商业中心1,M,23,93.94 我们应该忽略引号,这就是为什么我使用子字符串。但是,当我运行程序时,会出现以下错误: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 at edu.slu.prog2.finals2.VidezStudents

我正在使用.substring从文本文件中读取字符串的特定部分。下面是要读取的字符串示例:

2093505,“安布罗斯,拉尔夫·亨利B”,英国商业中心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;
        }

为什么不使用拆分代码(\”、\“\”、\“\”、\”、\“\”、)。

发生错误的原因是您只将字符串拆分为“,”,因此每个逗号后面的每个空格都在studentData中注册为单独的字符串。要解决此问题,可以使用如下正则表达式:

String[] studentData = line.split(", (\")?");

VidezStudentsRecords.java:54上写了什么?你说你可以打印数据是什么意思?您是否可能捕获到异常?否则,您的代码将无法继续,一旦发生异常,将结束程序。上述代码是否用于VidezStudentsRecords.java?哪一行是第54行?顺便说一句,2093505,“AMBROS,RALPH HENRY B”,BS Entrep 1,M,23,93.94中嵌入了逗号(在“……”)内,因此您最好使用合适的CSVReader查看一下这个调试问题,对于您提供的示例数据,它是不可复制的。请看这篇文章。您应该使用
try/catch
块,然后在
catch
中打印导致此问题的输入行,谢谢。我尝试了这个,但是错误仍然发生。再次感谢您使用这种拆分技术,我将从现在开始记住这一点。请尝试使用字符串[]studentData=line.split(“,(\”);我不小心在其中添加了空格。
String[] studentData = line.split(", (\")?");