java - java中的csv文件的电子邮件验证

标签 java email csv indexoutofboundsexception opencsv

所以我有这个 CSV 文件,其中包含一堆字段,其中一个是电子邮件字段。输入的电子邮件有些是空的,有些是格式不正确的。有点像这样:

Entry|First Name|Last Name|Email|Sign-up Date
1|Mike|Smith|mike.smith@gmail.com|2004-08-08
2||||2006-06-12
3|Perry|File|public|2010-09-14

我在这里检测电子邮件是否有效的代码如下:

private boolean[] validEmail;

public void setValidEmail(File fileName){
    Log log = LogFactory.getLog(LoadValidEmail.class);
    try{
        CSVReader csvReader = new CSVReader(new FileReader(fileName.getPath()));
        String[] row = null;
        char[] email = null;
        int count = 0;
        while(!(row = csvReader.readNext()).equals(null)){
            if(count!=0){
                if(!row[3].isEmpty()){
                    email = row[3].toCharArray();
                    for(int i = 0; i < email.length; i++){
                        if(email[i] == '@'){
                            validEmail[count-1]=true;
                            break;
                        }
                    }
                    if(!validEmail[count-1]){
                        validEmail[count-1] = false;
                    }
                }else{
                    validEmail[count-1] = false;
                }
            }
            count++;
        }
    }catch(FileNotFoundException e){
        log.info("File could not be found, make sure directory is correct and try again");
        e.printStackTrace();
    }catch(IOException e){
        log.info("File could not read next line, make sure file contains information and try again");
        e.printStackTrace();
    }catch(IndexOutOfBoundsException e){
        log.info("The array has gone out of bounds, this is not the row you are looking for");
        e.printStackTrace();
    }
}

每次运行时都会抛出 IndexOutOfBoundsException 并在行处崩溃:

if(!row[3].isEmpty()){
    ...
}

我真的不知道为什么会抛出此错误,因为我正在尝试访问电子邮件字段,这是 CSV 文件的第四个字段。为什么它会抛出此异常?我该如何修复它才能不自动抛出它?

最佳答案

首先,您需要告诉 CSVReader 您的分隔符默认为 |,它需要 , 之类的东西 new CSVReader(new FileReader(fileName.getPath) ()), '|');.

此外,我认为没有任何理由将 validEmail 作为数组,我认为它应该只是一个 boolean

还有一个建议是使用正则表达式来验证电子邮件,而不是逐个字符地读取电子邮件并进行验证。

关于java - java中的csv文件的电子邮件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25814226/

相关文章:

Java 8 使用 Lambda 将整数转换为字符串

azure - 系统为 Azure 逻辑应用生成的电子邮件

php - 如何为此查询添加符号`

python - 为什么 pandas read_csv 没有读取正确的行数?

java - 如果发生任何更新,如何重新启动应用程序?

java - Spring 启动启动器。如何在启动器 'x' 完成 beans 创建之前停止初始化其他启动器?

android - 检查android中是否设置了任何电子邮件帐户

python - Pandas DataFrame 的重音字符在 Excel 中出现乱码

java - 具有自己的对象的组合框

php - 在数据库中搜索重复项时,我是否应该将电子邮件区分大小写?