Не выводится полностью текст в консоль (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 шт):

Автор решения: had0uken

Все работает. Код ниже. Покажите код класса Сити и исходную строку вашу. Может там причина?

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
→ Ссылка
Автор решения: had0uken

Нашел! Ты когда парсишь поле 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)
                    + "'}" );



        }
→ Ссылка