我正在运行一个简单的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]时,它仍然会失败并抛出错误。
编辑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,这给了我我正在寻找的结果。我不是一个经验丰富的程序员,因为我认为我是。
答案 0 :(得分:3)
文件的最后一行是BLANK
(可能只是行标记的结尾),这导致最后一个.split(" ")
分配单个元素数组,其中没有任何内容,但是一个空字符串第一个位置。
确保您的文件没有ZERO长度行作为最后一行或任何行。
学习使用步调试器,它是你最好的朋友,并逐步完成代码,看看最后一次迭代时line
等于什么。
Ant和Netbeans与此错误无关,它与数据完全相关,我们无法以原始格式查看整个数据文件