【问题标题】:Java gives me OutofBounds error but I can still print the array?Java 给了我 OutofBounds 错误,但我仍然可以打印数组?
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 谢谢。我试过这个,但错误仍然发生。再次感谢您的拆分技术,从现在开始我会牢记这一点
  • 对不起,试试这个 String[] studentData = line.split(",(\")?"); 我不小心在里面加了空格。
【解决方案2】:

为什么不使用拆分代码(\",\"|\",|,\"|,)。

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 2011-04-11
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多