递归replaceAll java

May*_*day 7 java regex recursion

我试图用Java中的String替换所有重复的字符,并且只允许一个.

例如:

aaaaa ---> a

为此,我尝试使用该replaceAll方法:

"aaaaa".replaceAll("a*","a") //returns "aa"
Run Code Online (Sandbox Code Playgroud)

我开发了一个递归方法,可能不是很有效:

public String recursiveReplaceAll(String original,String regex, String replacement) {
    if (original.equals(original.replaceAll(regex, replacement))) return original;
    return recursiveReplaceAll(original.replaceAll(regex, replacement),regex,replacement);
}
Run Code Online (Sandbox Code Playgroud)

这种方法有效,我只是想知道是否有任何使用RegEx的例子,它可以提供更好的性能.

Jon*_*eet 12

你的replaceAll方法几乎是正确的 - 只是*匹配0次.你想要+的意思是"一个或多个".

"aaaaa".replaceAll("a+","a") // Returns "a"
Run Code Online (Sandbox Code Playgroud)


Tun*_*aki 7

你可以在没有递归的情况下完成.正则表达式"(.)\\1+"捕获每个字符,后跟自己至少一次,并用捕获的字符替换它们.因此,这将删除任何重复的字符.

public static void main(String[] args) {
    String str = "aaaabbbaaa";
    String result = str.replaceAll("(.)\\1+", "$1");
    System.out.println(result); // prints "aba".
}
Run Code Online (Sandbox Code Playgroud)

有了它,它适用于所有角色.