获取ArrayIndexOutOfBoundsException:2当我使用不同的分隔符来分割字符串时

时间:2015-02-24 15:57:33

标签: java regex

我收到一个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

只需点击图片即可放大。如果您希望我发布整个课程,这个方法只属于让我知道。感谢

2 个答案:

答案 0 :(得分:2)

^放在[]内以匹配除。之外的字符。

"[^A-Za-z]+"

外部的^匹配输入的开头。

另外,测试结果数组的大小:

if(input.length < 5 ) /* do something */;

答案 1 :(得分:0)

编辑:

如果有addEntry,如何知道代码何时到达input[5]?或者这是文件中的常数因素?您可以肯定的是,当您分割输入字符串时,只有6个元素的数组而不是更小?因为如果是这样,那么它解释了该行上的arrayindexoutofbounds异常。

解决方法是将输入数组作为addEntry方法中的参数传递,并在那里处理不同的长度。