0

我有一个我的小问题,当我尝试从文件中读取时,我会得到 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);
    }
    }
}

在这部分之后,我有一个 Acronyms 和东西的对象,但那里没有错误......

错误:

AA 自动应答

AAB 全方位广播

java.lang.ArrayIndexOutOfBoundsException:1

4

1 回答 1

2

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

while(innFil.hasNext())true如果您还剩 1 行,则可以返回。接下来你要做的是在 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 文件中包含\t500 次或更多次的字符串!

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

于 2013-11-13T09:28:39.740 回答