Ошибка ArrayIndexOutOfBoundsException после операции разбиения строки - PullRequest
1 голос
/ 22 апреля 2011

Я очень запутался с ArrayIndexOutOfBoundsException Я получаю.Я не могу сделать массив TempCity значений, выделенных после использования метода split.

String[] TempCity  = new String[2];
cityNames = props.getProperty("city.names").split(",");
cities = new City  [cityNames.length]; 
//I have also tried String[] TempCity without succes


    for (int i = 0; i < cities.length; i++) {

                     System.out.println(TempCity[1]);     //OK
                     TempCity  = cityNames[i].split(":"); // returns String array, problem is when Strings look like "something:" and do not receive second value of array
                     System.out.println(TempCity[1]);     //Error


                     try{

                         if (TempCity[1] == null){}

                     }
                   /* I was thinking about allocating second array's value in catch */
                     catch (Exception e)
                     {
                        TempCity[1] = new String();
                    //I'm getting Exception in thread "main"java.lang.ArrayIndexOutOfBoundsException: 1

                     }

                        try{

                           cities[i] = new City( TempCity[0], TempCity[1] );
...

Спасибо за помощь!На данный момент мое решение включает создание еще одного строкового массива:

             String[] temp  = new String[2];
             String[] tempCity  = new String[2];

             temp  = cityNames[i].split(":");

             for (int j = 0; j < temp.length; j++){

                    tempCity[j] = temp[j];

             }

Ответы [ 3 ]

4 голосов
/ 22 апреля 2011

split() не возвращает завершающие пустые строки.Вы должны учесть это в своем коде.Используйте версию с двумя аргументами split() и передайте отрицательное число в качестве второго аргумента.

Из javadoc:

Этот метод работает так, как если бы он вызывал два аргументаметод split с заданным выражением и предельным аргументом, равным нулю.Поэтому завершающие пустые строки не включаются в результирующий массив.

3 голосов
/ 22 апреля 2011

Это означает, что split() вернул массив с одним элементом, и вы пытаетесь получить доступ ко второму.Оценка TempCity.length покажет вам, что это '1'

Распечатайте TempCity[0] и посмотрите, что это такое;это будет вся ваша входная строка (cityNames [i]).

0 голосов
/ 22 апреля 2011

Выполнение String[] TempCity = new String[2]; не поможет, если вы собираетесь перезаписать TempCity чем-то другим.

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