Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 7 для правильно проиндексированного массива - PullRequest
0 голосов
/ 28 мая 2018

У меня есть CSV-файл с 8 столбцами:

enter image description here

Я поместил каждый столбец в массив со следующим кодом

public static void main(String args[]) {

    List<String> wholefile = new ArrayList<String>();
    List<String> id = new ArrayList<String>();
    List<String> property_address = new ArrayList<String>();
    List<String> first_name = new ArrayList<String>();
    List<String> last_name = new ArrayList<String>();
    List<String> email = new ArrayList<String>();
    List<String> owner_address = new ArrayList<String>();
    List<String> price = new ArrayList<String>();
    List<String> date_sold = new ArrayList<String>();


    Path filepath = Paths.get("./data.csv");


    try {

      BufferedReader br = new BufferedReader(new FileReader("./data.csv"));
       String line;
       while ((line = br.readLine()) != null) {
         wholefile.add(line);
         String[] cols = line.split(",");
         id.add(cols[0]);
         property_address.add(cols[1]);
         first_name.add(cols[2]);
         last_name.add(cols[3]);
         email.add(cols[4]);
         owner_address.add(cols[5]);
         price.add(cols[6]);
       }
      System.out.println(id);
      System.out.println(property_address);
      System.out.println(first_name);
      System.out.println(last_name);
      System.out.println(email);
      System.out.println(owner_address);
      System.out.println(price);


   } catch (IOException e) {
       e.printStackTrace();
   }
}

когда я запускаю этот код, я получаю следующий вывод:

id = [id,1,2,3,4,5...]
property_address = [property address, 94032 Mockingbird Alley, 293 Haas Lane, 75 Ruskin Lane...]

и так далее, как я и ожидал!

Однако, когда я добавляю

date_sold.add(cols[7]);

Я получаю сообщение об ошибке

Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 7

Я не знаю почему, так как есть 8 столбцов, и у меня естьначал индексирование с 0. Что-то не так с моим оператором while?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

На первый взгляд, я не вижу ничего плохого, но я предполагаю, что утверждение для второй записи line.split(",") не учитывает последний пустой столбец.когда Попробуйте отладить его с помощью оператора Sys.out и проверьте, какая строка создает проблему.

0 голосов
/ 28 мая 2018

Версия split , которую вы вызываете, удаляет завершающие пустые строки.

Следовательно, конечные пустые строки не включаются в результирующий массив

В вашей первой строке столбец date_sold пуст.Попробуйте вместо этого вызвать split:

String[] cols = line.split(",", -1);
...