Java字符串提取:从指定格式字符串拆分不同数据到多个ArrayList的实现问题
解决字符串提取问题的正确实现
你的问题在于之前用逗号分割的方式把每个条目的三个关联数据拆成了独立元素,导致无法同时提取并对应Jay后的数字、中间编号和末尾代码。咱们换个思路,用正则匹配每个完整的条目,一次性提取三个需要的部分,这样就能准确将数据分到三个对应的ArrayList中。
实现代码示例
import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public class StringExtractDemo { public static void main(String[] args) { String s = "#Jay125,150012 90,#Jay222,150043 00"; // 定义正则模式,匹配每个完整条目,三个分组分别对应需要的三个部分 Pattern entryPattern = Pattern.compile("#Jay(\\d+),(\\d+) (\\d{2})"); Matcher matcher = entryPattern.matcher(s); // 初始化三个ArrayList分别存储对应数据 ArrayList<String> jayNumbers = new ArrayList<>(); ArrayList<String> ids = new ArrayList<>(); ArrayList<String> codes = new ArrayList<>(); // 遍历所有匹配的条目,提取分组数据存入对应列表 while (matcher.find()) { jayNumbers.add(matcher.group(1)); // 提取Jay后的数字(125、222) ids.add(matcher.group(2)); // 提取中间的编号(150012、150043) codes.add(matcher.group(3)); // 提取末尾的两位代码(90、00) } // 验证结果 System.out.println("Jay后的数字列表: " + jayNumbers); System.out.println("编号列表: " + ids); System.out.println("代码列表: " + codes); } }
代码解释
- 正则模式说明:
#Jay(\\d+),(\\d+) (\\d{2})匹配每个完整的条目:#Jay(\\d+):匹配#Jay开头,捕获后面的一串数字(Jay后的编号),(\\d+):匹配逗号,捕获后面的一串数字(中间的ID)(\\d{2}):匹配空格,捕获后面的两位数字(末尾代码)
- Matcher遍历:通过
matcher.find()逐个找到所有符合格式的条目,然后用group(n)提取对应分组的内容 - 数据存储:将每个分组的结果分别存入对应的ArrayList中,保证三组数据的对应关系
运行结果
执行代码后会输出:
Jay后的数字列表: [125, 222] 编号列表: [150012, 150043] 代码列表: [90, 00]
内容的提问来源于stack exchange,提问作者dsknjksad
相关产品推荐
相关产品推荐

