如何使用 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+.com
:multipleWordCharacter@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?