有一个字符串:
"1112344866893334".
我想使用正则表达式匹配不重复的子字符串,例如:
"23", "8", "89", "4".
我该怎么做?
答案 0 :(得分:0)
您可以遍历字符串的长度,然后使用正则表达式断言子字符串不会重复,例如
String input = "1112344866893334";
for (int i=0; i < input.length()-1; ++i) {
String substring = input.substring(i, i+2);
String regex = "(?!.*" + substring + ".*" + substring + ").*";
if (input.matches(regex)) {
System.out.println("matching substring: " + substring);
}
}
答案 1 :(得分:0)
只要您可以容忍空匹配,就可以使用它:
import java.util.Arrays;
public class HelloWorld
{
public static void main(String[] args)
{
String[] items = "1112344866893334".split("(\\d)\\1+");
System.out.print(Arrays.toString(items));
}
}
答案 2 :(得分:0)
我修改了先前的答案,以包括一些特殊情况。
其中包括:
String[] testCases = {
"2111222333594454555", "333555666540922229789", "", "54", "111",
"111222333"
};
for (String s : testCases) {
String[] ss = s.replaceAll("(\\d)\\1+", "AA")
.replaceAll("^[A]+", "")
.split("[A]+");
System.out.println(Arrays.toString(ss));
}
}
第一个replaceAll用AA替换所有出现的重复数字。 第二个从字符串开头删除重复的A。 拆分在重复的A上拆分。