如何将数组中含分号的元素拆分并作为新元素加入原数组
问题:拆分数组中的邮箱地址并整理格式
我有如下字符串数组:
String[] mailToCc = {"chrisdgc794@gmail.com; christian.gamba@cast.com.py;", "notiene@gmail.com"};
第一个元素包含2个邮箱地址,末尾还有分号。需要将数组中任意位置的这类含多个邮箱的元素拆分,把拆分后的有效邮箱作为新元素加入数组,最终期望结果为:
["chrisdgc794@gmail.com", "christian.gamba@cast.com.py", "notiene@gmail.com"];
尝试的代码
import java.util.ArrayList; import java.util.Arrays; public class Main { public static void main(String[] args) { ArrayList<String> updatedMailToCc = new ArrayList<>(); String[] mailToCc = {"chrisdgc794@gmail.com; christian.gamba@cast.com.py;", "notiene@gmail.com"}; for (String element : mailToCc) { String[] splitElements = element.split(";"); // 添加原始元素本身 updatedMailToCc.add(element); // 如果能拆分,就把每个部分作为新元素加入 if (splitElements.length > 1) { updatedMailToCc.addAll(Arrays.asList(splitElements)); } } // 按需将ArrayList转换回数组 mailToCc = updatedMailToCc.toArray(new String[0]); // 打印更新后的数组 System.out.println("resultado =" + Arrays.toString(mailToCc)); } }
问题所在
运行后结果不符合预期,得到的是:
["chrisdgc794@gmail.com; christian.gamba@cast.com.py;", "chrisdgc794@gmail.com", "christian.gamba@cast.com.py", "notiene@gmail.com"]
错误根源:
- 代码错误地将未拆分的原始元素加入了结果列表,导致保留了冗余的长字符串
- 直接按分号拆分会让拆分后的邮箱带前后空格,且末尾分号会产生空字符串元素
修正后的代码
import java.util.ArrayList; import java.util.Arrays; public class Main { public static void main(String[] args) { ArrayList<String> updatedMailToCc = new ArrayList<>(); String[] mailToCc = {"chrisdgc794@gmail.com; christian.gamba@cast.com.py;", "notiene@gmail.com"}; for (String element : mailToCc) { // 按分号拆分,同时自动去除分号前后的空格 String[] splitElements = element.split("\\s*;\\s*"); for (String part : splitElements) { // 过滤拆分后产生的空字符串 if (!part.isEmpty()) { updatedMailToCc.add(part); } } } // 将列表转换为数组 mailToCc = updatedMailToCc.toArray(new String[0]); // 打印最终结果 System.out.println("resultado =" + Arrays.toString(mailToCc)); } }
关键说明
- 使用
\\s*;\\s*作为拆分规则:\\s*匹配任意数量的空白字符,确保拆分后的邮箱地址不带前后空格 - 遍历拆分后的每个部分,通过
!part.isEmpty()过滤掉末尾分号产生的空字符串 - 不再添加原始元素,直接将拆分后的有效邮箱加入结果列表
内容的提问来源于stack exchange,提问作者Chris G
相关产品推荐
相关产品推荐

