Java给了我OutofBounds错误,但是我仍然可以打印数组吗?

问题描述 投票:0回答:2

我正在使用.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
java list bufferedreader
2个回答
0
投票

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

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

-2
投票

为什么不使用分割代码(\“,\” | \“,|,\” |,)。

© www.soinside.com 2019 - 2024. All rights reserved.