ArrayIndexOutOfBounds异常,但不是超出范围?

时间:2018-05-11 17:22:55

标签: java arrays indexoutofboundsexception

我正在编写一个方法来编辑CSV文件中的记录,该文件应该打印除了行编辑之外的所有内容,然后将编辑后的版本打印到新文件中。

while((line = br.readLine()) != null) {
            if(line.contains("PATRON")) {
                pw.println(line);
            }
            if(!line.contains("PATRON")) {
                String[] str = line.split(",", 7);

                if(str[1].equals(ID)) {
                    pw.println(str[0] + "," + ID + "," + str[2] + "," + "false" + "," + "0" + "," + str[5] + "," + "0");
                }else {
                    pw.println(line);
                }
            }
        }

当我尝试运行它并输入有效的ID时,它会给我这个例外

java.lang.ArrayIndexOutOfBoundsException: 1
at myproject.Materials.returnmat(Materials.java:296)
at myproject.Library.mmenu(Library.java:121)
at myproject.Library.mainmenu(Library.java:143)
at myproject.Library.main(Library.java:11)

但是在运行一些测试后,

for(int x=0;x<str.length;x++) {
                    System.out.println(x+ ": " +str[x]);
                }

它完全输出id期望值,1:101,1:102等。 所以这告诉我ID肯定在str [1]索引。

为什么它会让我异常?

编辑:如果相关,这就是我怎么称呼它。

    case "7": 
            System.out.println("Enter material ID: ");
            String matsid = scan.nextLine();
            mats.returnmat(matsid);
            scan.nextLine();
            break;

2 个答案:

答案 0 :(得分:0)

在执行if(str [1] .equals(ID)){

之前检查字符串长度

类似的东西:

if(str.length<1) { 
    System.out.println("line no good="+line); 
} else ...

你可能在CSV中有一条坏线,或者这可能是最后一个空行。

答案 1 :(得分:0)

下面

        String[] str = line.split(",", 7);
        if(str[1].equals(ID)) {

分裂线必须具有长度= 1的返回数组,因此最大索引将为0 - 但是您使用str[1]超过它;