Проблема в чтении массива
City city = new City();
collect.add(city);
String[] arrSplit = delta.split(";");
city.setName(arrSplit[1]);
city.setRegion(arrSplit[2]);
city.setDistrcit(arrSplit[3]);
city.setPopulation(Integer.parseInt(arrSplit[4]));
city.setFoundation(arrSplit[5]);
collect.add(city);
Когда подается строка ["1"; "Адыгейск"; "Адыгея"; "Южный"; "12248";"123"], возникает ошибка выхода за предел массива. Но ведь в массиве 6 элементов и я обращаюсь к 5 (то есть последнему).
Почему? И как исправить?
Ответы (2 шт):
Автор решения: Gringo
→ Ссылка
Потому что переменные упорядочены и имеют индекс, начинающийся с 0 в массиве.
Автор решения: Alex Rudenko
→ Ссылка
Для указанных данных проблема не воспроизводится:
String delta = "[\"1\"; \"Адыгейск\"; \"Адыгея\"; \"Южный\"; \"12248\";\"123\"]";
String[] arrSplit = delta.split(";");
System.out.println("Число элементов: " + arrSplit.length + "; [5] = " + arrSplit[5]);
System.out.println(arrSplit.length);
for (int i = 0; i < arrSplit.length; i++) {
System.out.printf("arr[%d] = |%s|%n", i, arrSplit[i]);
}
Результат:
Число элементов: 6; [5] = "123"]
6
arr[0] = |["1"|
arr[1] = | "Адыгейск"|
arr[2] = | "Адыгея"|
arr[3] = | "Южный"|
arr[4] = | "12248"|
arr[5] = |"123"]|
Данный код работает для данных, разделённых в строке ровно одним символом ; без пробелов.
Печать городов выполняется при помощи переопределения метода toString в классе City.
public static void main(String[] args) {
List<City> cities = Parsing(Arrays.asList(
"1;Адыгейск;Адыгея;Южный;12248;123"
));
cities.forEach(System.out::println);
}
static List<City> Parsing(List<String> main) {
List<City> collect = new ArrayList<>();
for (String delta : main) {
City city = new City();
String[] arrSplit = delta.split(";");
city.setName(arrSplit[1]);
city.setRegion(arrSplit[2]);
city.setDistrict(arrSplit[3]);
city.setPopulation(Integer.parseInt(arrSplit[4]));
city.setFoundation(arrSplit[5]);
collect.add(city);
}
return collect;
}
Результат:
City{name='Адыгейск', region='Адыгея', district='Южный', population=12248, foundation='123'}