Не выводится полностью текст в консоль (java)
Не могу найти ответа, почему при использовании метода getListOfCities() в консоль выводится только часть текста, которая указана System.out.println, а именно:
Должен получить текст в консоль вида:
City{name='Ярославль', region='Ярославская область', district='Центральный', population=591486, foundation='1010'}
Но получаю:
'}
Заметил, что если в коде убрать последнюю часть вывода, а именно + "'}", то текст выводится без проблем (если так можно сказать, последняя часть тоже необходима все-таки).
Вопрос в корректном выведении результата, данный класс парсит строку, поля которой разбиты ";" и присваивает значения полям класса City, далее объект этого класса добавляется в ArrayList "listOfCities". В поля объектов все корректно вносится, проблема с выводом в консоль.
public class ListOfCities {
private static final List<City> listOfCities = new ArrayList<>();
public void cityStringParser(String cityString) {
String[] arrSplit = cityString.split(";");
int position = Integer.parseInt(arrSplit[0]);
String name = arrSplit[1];
String region = arrSplit[2];
String district = arrSplit[3];
int population = Integer.parseInt(arrSplit[4]);
String foundation = arrSplit[5];
listOfCities.add(new City(position, name, region, district, population, foundation));
}
public void getListOfCities() {
for (City city : listOfCities) {
System.out.println("City{name='" + city.getName() +
"', region='" + city.getRegion() +
"', district='" + city.getDistrict() +
"', population=" + city.getPopulation() +
", foundation='" + city.getFoundation()
+ "'}"
);
}
}
}
Класс City:
public class City {
private int position;
private String name;
private String region;
private String district;
private int population;
private String foundation;
public int getPosition() {
return position;
}
public String getName() {
return name;
}
public String getRegion() {
return region;
}
public String getDistrict() {
return district;
}
public int getPopulation() {
return population;
}
public String getFoundation() {
return foundation;
}
public City(int position,
String name,
String region,
String district,
int population,
String foundation) {
this.position = position;
this.name = name;
this.region = region;
this.district = district;
this.population = population;
this.foundation = foundation;
}
}
Главный метод Main:
public class Main {
public static void main(String[] args) {
ListOfCities listOfCities = new ListOfCities();
try {
Scanner scanner = new Scanner(Paths.get("src/main/resources/city_ru.csv"));
scanner.useDelimiter("\n");
while(scanner.hasNext()){
listOfCities.cityStringParser(scanner.next());
}
scanner.close();
} catch (IOException e) {
e.printStackTrace();
}
listOfCities.getListOfCities();
}
}
Вывод в консоль получается такой:
... //1000 с чем-то строк такие как следующие и адекватный вывод последнего объекта City
'}
'}
'}
'}
City{name='Ярославль', region='Ярославская область', district='Центральный', population=591486, foundation='1010'}
Благодарю за помощь)
Ответы (2 шт):
Все работает. Код ниже. Покажите код класса Сити и исходную строку вашу. Может там причина?
public class Test {
public static void main(String[] args) {
String str = "1;Ярославль;Ярославская область;Центральный;591486;1010";
ListOfCities listOfCities = new ListOfCities();
listOfCities.cityStringParser(str);
listOfCities.getListOfCities();
}
}
class ListOfCities {
private static final List<City> listOfCities = new ArrayList<>();
public void cityStringParser(String cityString) {
String[] arrSplit = cityString.split(";");
int position = Integer.parseInt(arrSplit[0]);
String name = arrSplit[1];
String region = arrSplit[2];
String district = arrSplit[3];
int population = Integer.parseInt(arrSplit[4]);
String foundation = arrSplit[5];
listOfCities.add(new City(position, name, region, district, population, foundation));
}
public void getListOfCities() {
for (City city : listOfCities) {
System.out.println("City{name='" + city.getName() +
"', region='" + city.getRegion() +
"', district='" + city.getDistrict() +
"', population=" + city.getPopulation() +
", foundation='" + city.getFoundation()
+ "'}"
);
}
}
}
class City {
int position;
String name;
String region;
String district;
int population;
String foundation;
public int getPosition() {
return position;
}
public String getName() {
return name;
}
public String getRegion() {
return region;
}
public String getDistrict() {
return district;
}
public int getPopulation() {
return population;
}
public String getFoundation() {
return foundation;
}
public City(int position, String name, String region, String district, int population, String foundation) {
this.position = position;
this.name = name;
this.region = region;
this.district = district;
this.population = population;
this.foundation = foundation;
}
}
Выход:
City{name='Ярославль', region='Ярославская область', district='Центральный', population=591486, foundation='1010'}
Process finished with exit code 0
Нашел! Ты когда парсишь поле getFoundation, допустим "1010" ты парсишь не 4 символа, а 5. Пятый символ - перевод строки. И в println ты передаешь не "1010", а "1010\n", где символ "\n" затирает твою строчку. Поэтому если ты поменяешь код вот так, то проблема решится.
public void getListOfCities() {
for (City city : listOfCities) {
System.out.println("City{name='" + city.getName() +
"', region='" + city.getRegion() +
"', district='" + city.getDistrict() +
"', population=" + city.getPopulation() +
", foundation='" + city.getFoundation().substring(0,city.getFoundation().length()-1)
+ "'}" );
}