如何将字符串拆分为多个子字符串,其中每个子字符串包含相等的尾随字符?如:
hello -> h, e, ll, o
helel -> h, e, l, e, l
答案 0 :(得分:3)
我想不出这里有一个单一的正则表达式,但是如果你对两步解决方案持开放态度,那么我们可以进行正则表达式替换,然后是空格分割:
String input = "hello";
input = input.replaceAll("(\\w)(?!\\1)", "$1 ");
System.out.println(Arrays.toString(input.split(" ")));
input = "helel";
input = input.replaceAll("(\\w)(?!\\1)", "$1 ");
System.out.println(Arrays.toString(input.split(" ")));
[h, e, ll, o]
[h, e, l, e, l]
这里的技巧是我们在每个字符前面添加一个空格分隔符,其中不是后面紧跟着相同的字符。因此ll
中的hello
保持相邻,因为在这种情况下前瞻断言会失败。
答案 1 :(得分:2)
您可以像这样使用Pattern和Matcher:
String text = "hello";
String regex = "(.)\\1*";
Matcher matcher = Pattern.compile(regex).matcher(text);
List<String> result = new ArrayList<>();
while (matcher.find()) {
result.add(matcher.group());
}
System.out.println(result);
如果您使用的是Java 9+,则可以使用:
String text = "hello";
String regex = "(.)\\1*";
List<String> result = Pattern.compile(regex).matcher(text).results()
.map(MatchResult::group)
.collect(Collectors.toList());
输出
[h, e, ll, o]