如何使用 Java 中的拆分从字符串中获取多封电子邮件的列表?

Posted

技术标签:

【中文标题】如何使用 Java 中的拆分从字符串中获取多封电子邮件的列表?【英文标题】:How to get a list of multiple emails from a string by using split in Java? 【发布时间】:2017-09-11 20:27:00 【问题描述】:

我有这个字符串,其中包含一堆电子邮件:

" email1@gmail.com , 'email2@gmail.com,email3@gmail.com, email4@gmail.com' , 'email5@gmail.com ,email6@gmail.com' "

所以我要做的是从每个子字符串中提取每封电子邮件,并最终得到一个包含所有这些电子邮件的数组:

例子:

String[] myArray = email1@gmail.com, email2@gmail.com, email3@gmail.com、email4@gmail.com、email5@gmail.com;

这是我的代码:

String str = "email1@gmail.com , 'email2@gmail.com,email3@gmail.com, email4@gmail.com' , 'email5@gmail.com ,email6@gmail.com'";

    String[] newArray = str.split(",");
     for(int i = 0 ; i < newArray.length; i++) 
        
        if(newArray[i].contains(",")) 
         
            newArray = newArray[i].split(",");
         
        

请记住,子字符串中可能包含多封电子邮件。

【问题讨论】:

一方面,由于您使用的是newAray each time,只要有子字符串,您就会丢失以前的值... @AntonH 任何想法如何解决这个问题?谢谢 问题出在哪里? @lexicore 问题是我正在努力将所有电子邮件放入一个数组中:(。你认为 while 循环可以做到吗? 有几种可能性。一种是使用临时数组,然后将这些拆分的结果放入另一个最终数组。另一种可能性是有一个返回子字符串结果的递归方法。真的取决于你想要什么,取决于你对字符串格式的确定程度。 【参考方案1】:

您可以使用模式匹配和正则表达式,一个简单的电子邮件如下:\w+@\w+.commultipleWordCharacter@multipleWordCharacter.com

public static void main(String[] args) 
    String str = "email1@gmail.com,'email2@gmail.com,email3@gmail.com, email4@gmail.com'" +
            ", 'email5@gmail.com ,email6@gmail.com'";

    Matcher m = Pattern.compile("\\w+@\\w+.com").matcher(str);
    List<String> emailsList = new ArrayList<>();

    while (m.find())
        emailsList.add(m.group());
    

    String[]emailsArray = emailsList.toArray(new String[0]);  // if really need an array
    System.out.println(Arrays.toString(emailsArray));

一开始我用了List,因为它很容易简单地添加元素,你不能用数组,但最后你仍然可以用我写的代码使用数组


这将打印出来:

[email1@gmail.com, email2@gmail.com, email3@gmail.com, email4@gmail.com, email5@gmail.com, email6@gmail.com]

Regex demo & Code demo

【讨论】:

能否为您的 while 循环添加花括号 ,以便我知道它在哪里结束? @progx done ;) 如果没有,只有下一条指令如果在循环中,如果我满意,请考虑接受答案 ;) @prox 如果我用分号 (;) 代替逗号 (,) 会起作用吗? 我将添加一个演示,因为您可以看到它可以处理很多事情【参考方案2】:

你为什么不做呢?:

String noQuotesStr = str.replace("'", ""); //removes '
String[] newArray = noQuotesStr.split(",");

【讨论】:

以上是关于如何使用 Java 中的拆分从字符串中获取多封电子邮件的列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mysql 中拆分/取消透视 group_concat?

在 Rails 中验证多封电子邮件和处理错误的最佳方法是啥?

如何在 Django 中支持使用多封电子邮件的用户?

如何在 laravel 中配置多封电子邮件 [关闭]

无法在多封电子邮件中重复使用电子邮件附件

如何在cakephp中一次发送多封电子邮件