用相等的字符

时间:2018-05-31 13:52:35

标签: java string split substring character

如何将字符串拆分为多个子字符串,其中每个子字符串包含相等的尾随字符?如:

hello -> h, e, ll, o
helel -> h, e, l, e, l

2 个答案:

答案 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]

Demo

这里的技巧是我们在每个字符前面添加一个空格分隔符,其中不是后面紧跟着相同的字符。因此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]