2013-10-14 90 views
-2

我正在运行一个简单的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]”的作品完全符合预期。

但由于某些原因,当我试图打印出 “信息[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

我检查这个多次,所以我敢肯定它不是我做的erro ron。我是一个相当有经验的程序员,所以我非常有信心,这不是我的错误。它在Netbeans中运行良好。我没有解释错误。

编辑1. 我的代码在第二次抛出while循环时抛出一个错误。 打印出信息[]长度,或者线条本身效果很好,我自己不打印出线条[1]。它仍然失败,并在我单独打印info [1]时引发错误。

http://pastebin.com/NAUeDsZH

编辑2. @Millie史密斯右侧线索,因为我的.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()> 1,那给了我我想要的结果。我不是一个有经验的程序员,因为我认为我是。

+2

体验!=不是我的错误。在循环之后的Println info.length ... System.out.println(“length:”+ info.length);调用拆分前的 –

+0

添加:System.out.println(“line =”+ line); – TofuBeer

+1

给我们输入文件。这听起来像是每条数据记录之间都有一条空行。也许pastebin它,但一定要pastebin *全部*。 –

回答

3

你的文件的最后一行是BLANK(可能只是一个行结束标记),这是导致最后.split(" ")分配与什么也没有,但在第一位置的空字符串的单个元素的数组。

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

学习如何使用步调试器,它是你最好的朋友,并且遍历代码,看看在最后一次迭代中什么是line

蚂蚁和Netbeans什么都没有做这个错误,它完全是相关的数据,我们无法看到您的整个数据文件本机格式

+0

最后一行是空白。我纠正了它。我仍然抛出这个错误。我忘了提及第二次抛出while循环时抛出的错误。不是在结束或开始。 – morganw09dev

+0

@MorganK - 这可能是因为你第一次在信息中获得多个元素。认为!! (提示:在'while'之后放一行'print'。) –

+0

@MorganK - 不要只是做'System.out.println(line);'。做'System.out.println(“line ==>”+ line +“<==”);'所以你可以确定你正在打印'line',你知道它有多长,是否有任何领先或尾随空白。 –