我正在为另一个程序编写此类,并且在拆分字符串str时,我不断收到Array out of bounds异常。

    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]部分。通常,此类错误来自正则表达式,是否将第二部分中的[理解为正则表达式?如果是这样,我将如何解决?我尝试环顾四周,但我只能找到由于正则表达式引起的类似错误。这是一样的吗?

谢谢您的帮助。

最佳答案

您正在执行引用相等性比较,而不是字符串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]

我希望这有帮助:


更多见解:Java String.equals versus ==

07-24 14:47