Я продолжаю получать исключение "ArrayIndexOutOfBounds" при использовании String.split - PullRequest
0 голосов
/ 22 сентября 2011

Я пишу этот класс для другой программы и продолжаю получать исключение Array вне границ при разбиении строки 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 ]

4 голосов
/ 22 сентября 2011

Причиной исключения может быть количество строк в файле, превышающее размер вашего массива. Также замените это if(str!="[GameEvents]") на if(!str.equals("[GameEvents]")) для получения правильных результатов.

2 голосов
/ 22 сентября 2011

Вы проводите сравнение равенства ссылок вместо строки 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].

Надеюсьэто помогает:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...