从文件中读取时获取arrayindexoutofbounds

时间:2013-11-13 09:27:17

标签: java java.util.scanner indexoutofboundsexception

我有这个小问题,在尝试从文件中读取时,我会得到arrayindexoutofboundsexception。我不知道更好或更详细的解释方法,所以我将粘贴代码和错误如下。 这完全是我计划的主要方法。

    File fila;
    String[] innlesningsarray=new String[500];

    try{
        Scanner innFil=new Scanner(new File("/uio/hume/student-u77/makrist/Downloads/akronymer.txt"));

        while(innFil.hasNext()){
        for(int i=0; i<500; i++){

        // String innLest=br.nextLine();
            innlesningsarray=innFil.nextLine().split("\t");
            System.out.println(innlesningsarray[i]);
            System.out.println(innFil.nextLine());
        }
        System.out.println("test");
        }
        System.out.println("Test2");

    } catch(Exception e){
        System.out.print(e);
    }
    }
}

在这部分之后,我有一个缩略语和东西的对象,但没有错误......

错误:

  

AA自动答案

     

AAB All-to-All Broadcast

     

java.lang.ArrayIndexOutOfBoundsException:1

1 个答案:

答案 0 :(得分:2)

你在循环中做nextLine()两次。这将在您的文件中读取2行。

如果您还剩1行,

while(innFil.hasNext())可以返回true。接下来你要做的就是读取while循环中的2行。由于只剩下1行,你将获得例外。

你也把它放在一个for循环中。这意味着您执行readLine()方法的500 * 2倍,而您只检查1行。

尝试以下方法:

try{
    Scanner innFil=new Scanner(new File("/uio/hume/student-u77/makrist/Downloads/akronymer.txt"));

    while(innFil.hasNext()){
        for(int i=0; i<500; i++){
            String theReadLine = innFil.nextLine();
            innlesningsarray=theReadLine.split("\t");
            System.out.println(innlesningsarray[i]);
            System.out.println(theReadLine);
        }
        System.out.println("test");
    }
    System.out.println("Test2");

    } catch(Exception e){
        System.out.print(e.printStackTrace);
    }
}

这解决了nextLine()方法可能出错的问题。您应确保innlesningsarray实际上有500个或更多条目,否则您将收到例外。确保您的akronymer.txt文件中包含字符串\t 500次或更多次!

我还更改了您的catch - 代码。您应该写print(e)而不是e.printStackTrace()。这将打印有关异常的大量有用信息。感谢Roland Illig的评论!