使用Java中的模式匹配器拆分为ArrayList

时间:2014-09-12 12:40:18

标签: java

String s = "A..?-B^&';(,,,)G56.6C,,,M4788C..,,A1''";
String[] result = s.split("(?=[ABC])");
System.out.println(Arrays.toString(result));

输出:

 [A..?-, B^&';(,,,)G56.6, C,,,M4788, C..,,, A1'']

请参阅上述案例中的分割。我正在尝试根据A, B or C分隔字符串。如何使用ArrayList将相同的拆分字符串转换为pattern matcher?我无法弄清楚如何分组以下代码。

Pattern p = Pattern.compile("(?=[ABC])");
Matcher m = p.matcher(s);
List<String> matches = new ArrayList<>();
while (m.find()) {
   matches.add(m.group());
}

另外假设我在第一次出现A, B or C之前有几个字符,我想与ArrayList中的第一个元素结合起来。 ,,一个..

感谢帮助。

1 个答案:

答案 0 :(得分:4)

[ABC][^ABC]*

如果我没有省略任何适用于您提供的代码的边缘案例

对于额外的问题,你可以将(^[^ABC]*)*添加到beggining,但这会使它变慢并且看起来不那么可读,更不用说它只适用于单行字符串来检查。我建议只是手动解析开始的字符,将其视为特殊情况。