Java中的正则表达式模式用于查找和删除重复的电子邮件

时间:2012-12-12 16:31:45

标签: java regex

public String readEmails(String fileData) {

    String regex = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9]"
            + "(?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?";

    String emails = "", emails2 = "";
    fileData = fileData.toLowerCase();
    Matcher m = Pattern.compile(regex).matcher(fileData);
    while (m.find()) {
        emails += m.group()+", ";
    }

    return emails;
}

我正在阅读rtf文件,查找电子邮件然后存储到数据库中。我发现两次提取一封电子邮件。 HYPERLINK“mailto:aa@ymail.com”,然后是aa@ymail.com

如何通过删除所有类似的电子邮件来匹配两封类似的电子邮件并保留一份副本?

2 个答案:

答案 0 :(得分:1)

您可以将代码更改为

Set<String> set = new HashSet<String>();
Matcher m = Pattern.compile(regex).matcher(fileData);
    while (m.find()) {
        String email = m.group();
        if (!set.contains(email)) {
           emails += email + ", ";
           set.add(email);
        }
    }

    return emails;
}

答案 1 :(得分:0)

而不是使用逗号将电子邮件保存为字符串:

  1. 小写它们。
  2. 将它们存储在字典(HashSet)中以对其进行重复数据删除
  3. 最后,从字典中的元素中创建输出字符串。