#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
что-то другое.