我有这个小问题,在尝试从文件中读取时,我会得到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
答案 0 :(得分:2)
你在循环中做nextLine()
两次。这将在您的文件中读取2行。
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的评论!