[英]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
将不会被分割。
如果需要,可以手动添加大小写,以便可以确定在ab
或bca
您还希望通过
stringVar.split("(?<=(\\w))(?=\\1)|(?<=ab|bca)")
现在将返回ab, b, bca, ab, ab, b, bca, a, ab, bca
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.