我收到一个ArrayIndexOutOfBoundsException:2并且不知道如何修复它。它发生在我将分隔符从(“,”)更改为(“^ [A-Za-z] +)。这是我遇到问题的方法:
public void populateArrayList() throws FileNotFoundException{
File inputFile = new File("StirlingHistoric.csv");
Scanner scan = new Scanner(inputFile);
while(scan.hasNext()){
String line = scan.next();
String [] input = line.split("^[A-Za-z]+"); // try get the useDelimiter method to work instead
addEntry(input[0], input[1], input[2], input[3], input[4], input[5]);
}
scan.close();
}
程序在调用addEntry时崩溃。问题是如果我使用:
String [] input = line.split(",");
作为分隔符它工作正常,但.csv文件中还有其他符号我必须摆脱,大多只是引号,所以使用("^[A-Za-z]+")
分隔符是有意义的。
我上传了调试器的两张图片,其中提供了阵列中发生的一些信息。我已经突出显示(在图像中)绿色和蓝色的一些代码行以引起对它们的注意。并且还对图像做了一些评论。这是链接:
图1:http://tinypic.com/r/25hdbgx/8
图2:http://tinypic.com/r/35lb3nt/8
只需点击图片即可放大。如果您希望我发布整个课程,这个方法只属于让我知道。感谢
答案 0 :(得分:2)
将^
放在[]
内以匹配除。之外的字符。
"[^A-Za-z]+"
外部的^
匹配输入的开头。
另外,测试结果数组的大小:
if(input.length < 5 ) /* do something */;
答案 1 :(得分:0)
编辑:
如果有addEntry
,如何知道代码何时到达input[5]
?或者这是文件中的常数因素?您可以肯定的是,当您分割输入字符串时,只有6个元素的数组而不是更小?因为如果是这样,那么它解释了该行上的arrayindexoutofbounds异常。
解决方法是将输入数组作为addEntry方法中的参数传递,并在那里处理不同的长度。