用字符替换未知的图案大小

dia*_*zar 0 java regex

有没有办法用正则表达式替换特定的重复字符?

例:

str ="安妮有没有东西"

解决方案是:

"Ane有n个东西"

如果一个字符串有两个或多个彼此相邻的一个字符的实例,那么正则表达式应该只用一个替换它们.

fge*_*fge 7

有可能的:

inputString.replaceAll("(.)\\1+", "$1")
Run Code Online (Sandbox Code Playgroud)

匹配一个字符,捕获它,重复一次或多次,仅替换捕获.

然而,这可能不是更快的解决方案.这样的事情也可以用一个简单的循环:

public String removeRepetitions(final String input)
{
    if (input.isEmpty())
        return input;

    final int len = input.length();
    final StringBuilder sb = new StringBuilder(length);

    char current = input.charAt(0);
    char c;
    sb.append(current);

    for (int i = 1; i < len; i++) {
        c = input.charAt(i);
        if (c != current) {
            sb.append(c);
            current = c;
        }
    }

    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)