使用String.split时,我不断收到“ArrayIndexOutOfBounds”异常

时间:2011-09-22 05:57:56

标签: java string file-io

我正在为另一个程序编写这个类,当我分割字符串 str 时,我不断收到一个数组超出范围的异常。

    static String[][] readFile(){
    BufferedReader in;
    count = 0;
    String[][] ret = new String[20][2];
    try
    {
        in = new BufferedReader(new FileReader(CFGfolder+"\\input.ini"));
        String str;

        while((str=in.readLine()) != null){
            if(str!="[GameEvents]"){
                ret[count][0]=str.split("=")[0];
                ret[count][1]=str.split("=")[1];
                count++;
            }
        }
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return ret;

}

这是它正在阅读的文件的格式。

evtCastSpell1=[q]
evtCastSpell2=[w]
evtCastSpell3=[e]
evtCastSpell4=[r]

我试着看看 str 字符串到底是什么意思(意思是,在没有拆分的情况下打印它),它表明它正确地读取文件并将其放入数组中。当我尝试读取分割字符串的 [1] 时出现问题。 [0] 很好,它正确打印

evtCastSpell1
evtCastSpell2
evtCastSpell3
evtCastSpell4

我真的不知道为什么不读 [1] 部分。通常这种错误来自正则表达式,它是否理解第二部分中的 [>作为正则表达式?如果是这样我怎么解决这个问题?我试过环顾四周,但我能找到的是由于正则表达式而发生的类似错误。这一个是一样的吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

异常的原因可能是文件中的行数超过了数组的大小。 同时将此if(str!="[GameEvents]")替换为if(!str.equals("[GameEvents]"))以获得正确的结果。

答案 1 :(得分:2)

您正在进行引用相等性比较而不是字符串equals()比较:

我会这样做:

while((str=in.readLine()) != null){
    if(!"[GameEvents]".equals(str)) {
        String[] splits = str.split("=");
        ret[count][0]=splits[0];
        ret[count][1]=splits[1];
        count++;
    }
}

ArrayIndexOutOfBoundsException的原因是因为:

if(str!="[GameEvents]"){

由于引用相等,if表达式返回true,您在值split()上执行[GameEvents]

我希望这会有所帮助: