Ошибка ArrayIndexOutOfBoundsException после операции разделения строки

#java #string

#java #строка

Вопрос:

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

 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];

             }
  

Ответ №1:

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

Из javadoc:

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

Ответ №2:

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

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

Ответ №3:

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