добавление в список данных полученных при использовании класса Scanner

Рейтинг: 1Ответов: 1Опубликовано: 28.01.2023

Я считываю сканером csv файл. и добавляю результат в список, но я получаю не то, что мне нужно. В списке получается всего один индекс(в котором массив данных). Мне потом надо преобразовать список в массив и перебрать его, но у этого списка всего один индекс, как добраться до массива внутри списка или сразу записать данные в список с пятью индексами? вот фрагмент кода:

public class ReaderClass {
private void printFileContent(InputStream is) throws IOException {

    try (Scanner scanner = new Scanner(is)) {
        List<City> cityList;
        while (scanner.hasNextLine()) {
            String[] splitLine = scanner.nextLine().split(";");
            cityList = Arrays.asList(new City(splitLine[1], splitLine[2], splitLine[3], splitLine[4], splitLine[5]));
            System.out.println(cityList[1]); // будет ошибка problems with the filejava.lang.ArrayIndexOutOfBoundsException:
                                                                                  Index 1 out of bounds for length 1
        }

Ответы

▲ 1Принят

А если так:

public class ReaderClass {
    
    public static void main(String[] args) throws Exception {
        List<City> cities = printFileContent(new FileInputStream("filename.csv"));
        for (int i = 0; i < cities.size(); i+=1) {//здесь меняете шаг, например, i+=4
            System.out.println(cities.get(i)); // здесь в консоль выводятся объекты, тут же в цикле можно искать максимальное число
        }
        
    }

    private static List<City> printFileContent(InputStream is) throws IOException {
        try (Scanner scanner = new Scanner(is)) {
            List<City> cities = new ArrayList<>();
            while (scanner.hasNextLine()) {
                String[] splitLine = scanner.nextLine().split(";");
                City city = new City(splitLine);
                cities.add(city);
            }
            return cities;
        }
    }
    
}

class City {
    private final Long id;
    private final String name;
    private final String republic;
    private final String region;
    private final Long population;
    private final Integer year;

    public City(String [] args) {
        this.id = Long.valueOf(args[0]);
        this.name = args[1];
        this.republic = args[2];
        this.region = args[3];
        this.population = Long.valueOf(args[4]);
        this.year = Integer.valueOf(args[5]);
    }

    public String getName() {
        return name;
    }

    public String getRepublic() {
        return republic;
    }

    public String getRegion() {
        return region;
    }

    public Long getPopulation() {
        return population;
    }

    public Integer getYear() {
        return year;
    }

    @Override
    public String toString() {
        return "City{" + "name=" + name + ", republic=" + republic + ", region=" + region + ", population=" + population + ", year=" + year + '}';
    }

}