在Java中读取csv文件时如何跳过空白单元格?

在Java中读取csv文件时如何跳过空白单元格?,java,csv,filereader,Java,Csv,Filereader,正在尝试创建csv文件读取器,但读取器遇到行尾空白时会收到ArrayIndexOutOfBoundsException 示例:姓名、电子邮件、年龄、城市 约翰,johnsmith@email,23,纽约-这是标准的 约翰,johnsmith@email,23,-这失败了 23号,纽约-这很有效 约翰,johnsmith@email,,-这失败了 欢迎任何其他反馈 这是密码 public class Main { static String filepath = "fil

正在尝试创建csv文件读取器,但读取器遇到行尾空白时会收到ArrayIndexOutOfBoundsException

示例:姓名、电子邮件、年龄、城市

  • 约翰,johnsmith@email,23,纽约-这是标准的
  • 约翰,johnsmith@email,23,-这失败了
  • 23号,纽约-这很有效
  • 约翰,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();
            }
        }
    }
    
    公共类主{
    静态字符串filepath=“filepath.csv”;
    公共静态void main(字符串[]args){
    SQLiteDB=newsqlitedb();
    CSVReader(文件路径);
    }
    公共静态void CSVReader(字符串文件路径){
    列表用户=新建ArrayList();
    BufferedReader br=null;
    弦线;
    整数计数=1;
    试一试{
    br=新的BufferedReader(新的文件读取器(文件路径));
    而((line=br.readLine())!=null){
    如果(line.trim().length()>0){
    用户=新用户();
    字符串[]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];
    用户。添加(用户);
    System.out.println(“计数:“+Count+”+user.getBool2());
    计数++;
    }
    }
    }catch(filenotfounde异常){
    e、 printStackTrace();
    }捕获(IOE异常){
    e、 printStackTrace();
    }捕获(阵列索引边界外异常e){
    e、 printStackTrace();
    }
    }
    }
    
    对于城市值,只需在赋值前使用三元运算符检查数组长度:

    user.city = userinfo.length == 10 ? userinfo[9] : "";
    

    如果这不是一个家庭作业项目,你为什么不使用图书馆呢?GitHub上有几个,这里有一个似乎很容易使用的-。

    所以只有
    userinfo[9]
    是个问题?如果找不到该值,该值应该是什么?可以尝试捕获以检测
    ArrayIndexOutOfBoundsException