当前位置: 首页 > 知识库问答 >
问题:

使用正则表达式按域分组电子邮件登录数据[Java]

邢飞昂
2023-03-14

我有一个电子邮件列表,看起来如下所示:

james; james@gmail.com
george; george@gmail.com
alex; alex@yahoo.com
anthony; anthony@yahoo.com
mike; mike@outlook.com

我需要这样组织它们:

james,george - gmail.com
alex,anthony - yahoo.com
mike - outlook.com

我如何在Java使用regex而不使用任何容器类和流来实现这一点呢?

共有2个答案

束敏学
2023-03-14

您将必须有映射到存储列表的名称为每个域。您可以对string使用split方法,如下所示:

public static void main(String[] args) throws Exception {
    String [] emails = {
            "james; james@gmail.com",
            "george; george@gmail.com",
            "alex; alex@yahoo.com",
            "anthony; anthony@yahoo.com",
            "mike; mike@outlook.com"};
    
    Map<String,List<String>> domains = new HashMap<>();
    List<String> names = null;
    
    for(String entry : emails) {
        String[] data = entry.split(";|@");
        if(domains.containsKey(data[2])){
            names = domains.get(data[2]);
        } else {
            names = new ArrayList<>();
            domains.put(data[2], names);
        }
        names.add(data[0]);
    }
    
    for(String key : domains.keySet()) {
        System.out.println(domains.get(key) + " - " + key);
    }
}

输出:

[mike] - outlook.com
[james, george] - gmail.com
[alex, anthony] - yahoo.com
公良琛
2023-03-14

我不知道这和你的意图有多接近,但我试了一下:

String [] emails = {
        "james; james@gmail.com",
        "george; george@gmail.com",
        "alex; alex@yahoo.com",
        "anthony; anthony@yahoo.com",
        "mike; mike@outlook.com"};

Map<String, String> mailMap = new HashMap<>();

Pattern p = Pattern.compile(" ([a-zA-Z]+)@([a-zA-Z.]+)");

for (String string : emails) {
    Matcher m = p.matcher(string);
    if (m.find( )) {
        String name = m.group(1);
        String mailProvider = m.group(2);
        
        if (mailMap.containsKey(mailProvider)) {
            String oldValue = mailMap.get(mailProvider);
            mailMap.put(mailProvider, oldValue + "," + name);
        } else {
            mailMap.put(mailProvider, name);
        }
        
     } else {
        System.out.println("String did match expected format");
     }
}

for (String mailProvider : mailMap.keySet()) {
    System.out.println(mailMap.get(mailProvider) + " - " + mailProvider);
}
 类似资料:
  • 问题内容: 首先,我知道不建议使用正则表达式发送电子邮件,但我必须对此进行测试。 我有这个正则表达式: 在Java中,我这样做: 但是,无论电子邮件是否格式正确,正则表达式都会失败。Eclipse内部的“查找并替换”功能可以在同一个正则表达式下正常运行。 任何想法? 问题答案: FWIW,这是我们用来验证电子邮件地址的Java代码。正则表达式非常相似: 工作相当可靠。

  • 我使用以下正则表达式来验证单个电子邮件地址。如何使此正则表达式接受以逗号分隔的电子邮件地址列表? 我使用razor视图将正则表达式放置在输入标记中:

  • 问题内容: 我想要一个正则表达式,它将从String中提取电子邮件地址(使用Java正则表达式)。 那确实有效。 问题答案: 这是真正有效的正则表达式。我花了一个小时在网上冲浪并测试了不同的方法,尽管Google在这些页面上排名最高,但大多数方法都无效。 我想与您分享一个有效的正则表达式: 这是原始链接:http : //www.mkyong.com/regular-expressions/how

  • 问题内容: 我正在尝试编写一个正则表达式来屏蔽电子邮件地址。下面的例子。 输入:john.doe@example.en.com 输出:j*******@e*********.com 我已经尝试了以下方法,但似乎无法正常工作。 正则表达式: 输出:j * @ example.en.com 正则表达式: 输出:j ******。com 任何帮助,将不胜感激。 演示 问题答案: ⇒(当前问题)- (请参

  • 所以,我发现“name@.com.com”是一个有效的电子邮件地址,还有更多类似这样的子域。所以现在我希望用户不要进入子域。是否有任何REGEX验证电子邮件地址只在一个域,如“name@gmail.com”,而不是多个域或子域。 我也尝试了不同的google Regex并将其实现到项目中,但出现了同样的问题。 请帮我一下。 谢谢

  • 问题内容: 有人可以向我解释这个Java Regex吗? 此正则表达式用于验证 电子邮件地址 。 问题答案: 如今,验证电子邮件地址被认为是一种不好的做法(停止使用regex验证电子邮件地址),尤其是使用问题中的表达式时。例如,这是一个更完整的表达式。 至于此表达式,我们将其分为几部分: 匹配字符串的开头 匹配列表中的至少一个字符 非捕获(请参阅backreference)组,可以重复0..n次,