索引超出界限错误

时间:2013-10-14 23:58:59

标签: java

我正在运行一个简单的java程序。我用Netbeans编写了它。一切都很好。尝试转换代码以使用Ant,因为这是我的课程所需要的,而且我遇到了一个奇怪的错误。

来自.txt的所有文字格式为

Baker William Chavez 04/01/05
Sanchez Jose Chavez 06/15/05
etc ...

大约有20个条目,3个名字和一个日期。每个条目都在自己的行上。

我正在使用此代码来阅读它。

while ((line = br.readLine()) != null) {
    //formatting data correctly
    String [] info = line.split(" ");
    for(int i = 0; i < info.length; i++){
        System.out.println(info[i]);
    }
    System.out.println(info[0]);
    System.out.println(info[1]); /* this line of code */
}

因此每个信息[]的长度为4.当我运行for循环时,它会完全按预期打印出所有内容。打印出“info [0]”完全符合预期。

但出于某种原因,当我尝试打印出“info [1]”时,我得到了一个

java.lang.ArrayIndexOutOfBoundsException: 1

错误。我没有解释为什么会发生这种情况。当我不尝试单独打印信息[1]时,我的程序正常工作。在for循环中,info [1]被打印出来,因为for循环循环了4次。这段代码在Netbeans中运行得很好,但是使用Ant是行不通的。

有没有人知道只添加或删除一行

System.out.println(info[1]);

导致我的程序运行或抛出异常?

我正在运行Ant 1.9.2

我正在运行Java 1.7.0_17

我已经多次检查过了,所以我很确定这不是我犯了错误的东西。我是一个相当有经验的程序员,所以我非常有信心这不是我的错误。它在Netbeans中运行良好。我没有对错误的解释。

编辑1。 我的代码在第二次抛出while循环时抛出错误。 打印出info []长度,或者行本身很好用,我不打印出行[1]。当我单独打印信息[1]时,它仍然会失败并抛出错误。

http://pastebin.com/NAUeDsZH

编辑2。 @Millie Smith是正确的,因为我的.txt文件格式不正确。由于某种原因在记事本中查看它并没有显示每行之间的额外空间。 http://pastebin.com/njjdSHHZ 我正确的pastebin。 我试图使用代码删除所有空格,逗号,新行等,

line = line.replaceAll("\\s+", " ");
line = line.replaceAll(",","");
line = line.replaceAll("\\n", "");
line = line.replaceAll("\\r", "");
String [] info = line.split(" ");

我错误地认为该代码会处理任何违规行为。我错了。所以在我的第一个pastebin上,我将代码格式化为我认为我正在处理的内容,这也是不正确的。

所以如果我测试line.length()&gt; 1,这给了我我正在寻找的结果。我不是一个经验丰富的程序员,因为我认为我是。

1 个答案:

答案 0 :(得分:3)

文件的最后一行是BLANK(可能只是行标记的结尾),这导致最后一个.split(" ")分配单个元素数组,其中没有任何内容,但是一个空字符串第一个位置。

确保您的文件没有ZERO长度行作为最后一行或任何行。

学习使用步调试器,它是你最好的朋友,并逐步完成代码,看看最后一次迭代时line等于什么。

Ant和Netbeans与此错误无关,它与数据完全相关,我们无法以原始格式查看整个数据文件