Как пропустить пустые ячейки при чтении файла csv в Java? - PullRequest
0 голосов
/ 07 августа 2020

Попытка создать программу чтения CSV-файлов, но программа чтения получает исключение ArrayIndexOutOfBoundsException, когда сталкивается с пробелом в конце строки.

Пример: имя, адрес электронной почты, возраст, город

  1. Джон, johnsmith@email, 23, Нью-Йорк - Это работает и является стандартным
  2. Джон, johnsmith@email, 23, - Это не работает
  3. ,, 23, Нью-Йорк - Это работает
  4. John, johnsmith@email ,, - Это не удается

Также приветствуются любые дополнительные отзывы!

Вот код.

    public class Main {
    static String filepath = "filepath.csv";

    public static void main(String[] args) {
        SQLiteDB db = new SQLiteDB();
        CSVReader(filepath);        
    }

    public static void CSVReader(String filepath) {
        List<User> users = new ArrayList<User>();
        BufferedReader br = null;
        String line;
        int count = 1;

        try {
            br = new BufferedReader(new FileReader(filepath));
            while ((line = br.readLine()) != null) {
                if(line.trim().length() > 0) {
                User user = new User();
                String[] userinfo = line.split(",(?=([^\"]|\"[^\"]*\")*$)");
                user.firstName = userinfo[0];
                user.lastName = userinfo[1];
                user.email = userinfo[2];
                user.gender = userinfo[3];
                user.image = userinfo[4];
                user.bank = userinfo[5];
                user.transaction = userinfo[6];
                user.bool1 = userinfo[7];
                user.bool2 = userinfo[8];
                user.city = userinfo[9];
                users.add(user);
                
                System.out.println("Count:" + count + " " + user.getBool2());
                count++;
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
        }
    }
}

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Для значения города просто используйте тернарный оператор, чтобы проверить длину массива перед назначением:

user.city = userinfo.length == 10 ? userinfo[9] : "";
0 голосов
/ 07 августа 2020

Если это не домашнее задание, почему бы вам не воспользоваться библиотекой? На GitHub их несколько, и вот тот, который кажется простым в использовании - https://github.com/osiegmar/FastCSV.

...