繁体   English   中英

java字符串拆分正则表达式保留定界符

[英]java string split regular expression retain delimiter

输入一个输入字符串,例如

"abbbcaababbbcaaabbca"

我想将这样的字符串分成组“ bca ”,“ ab ”,“ a ”和“ b ”的数组

所以上面的例子会返回

"ab", "b", "bca", "ab", "ab", "b", "bca", "a", "ab", "bca".

我有29行嵌套循环的代码来完成此任务(返回ArrayList)。 但是,最好使用一行正则表达式来完成此操作。

可以使用以下方法完成此任务吗?

stringVar.split("regEX") 

不是Matcher.find ,但是您可以使用Matcher.find和循环来实现:

ArrayList<String> result = new ArrayList<String>();
String s = "abbbcaababbbcaaabbca";
Matcher m = Pattern.compile("bca|ab|a|b").matcher(s);
while (m.find())
    result.add(m.group());

演示

可以使用环视断言来实现,但是@falsetru的答案比split ting更可取。

String[] ss = "abbbcaababbbcaaabbca".split("(?<=bca|ab)|(?<=a(?=ab))|(?<=b(?=bca))");
System.out.println(Arrays.toString(ss)); //=> [ab, b, bca, ab, ab, b, bca, a, ab, bca]

如果字符串仅包含字母,则可以使用后向引用来缩短它。

String[] ss = "abbbcaababbbcaaabbca".split("(?<=bca|ab)|(?<=(.)(?=\\1))")

您似乎正在尝试在相同的字符之间进行拆分。 在这种情况下,您可以使用

stringVar.split("(?<=(\\w))(?=\\1)") 

但这将导致ab, b, bca, abab, b, bca, a, ab, bca ,这意味着abab将不会被分割。

如果需要,可以手动添加大小写,以便可以确定在abbca您还希望通过

stringVar.split("(?<=(\\w))(?=\\1)|(?<=ab|bca)") 

现在将返回ab, b, bca, ab, ab, b, bca, a, ab, bca

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM