递归替换Java中的replaceAll

7

我正在尝试在Java中替换所有重复的字符,并仅保留一个。

例如:

aaaaa ---> a

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

"aaaaa".replaceAll("a*","a") //returns "aa"

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

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);
}

这个方法可以工作,我只是想知道是否有使用正则表达式等更高效的方法。


2
replaceAll("a+", "a") - rock321987
2个回答

13

你的replaceAll方法几乎正确 - 只是*匹配零个字符。你需要+表示“一个或多个”。

"aaaaa".replaceAll("a+","a") // Returns "a"

7
您可以不使用递归来实现。正则表达式"(.)\\1+"捕获每个至少重复一次的字符,并用捕获的字符替换它们。因此,这将删除任何重复的字符。
public static void main(String[] args) {
    String str = "aaaabbbaaa";
    String result = str.replaceAll("(.)\\1+", "$1");
    System.out.println(result); // prints "aba".
}

有了这个,它适用于所有字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接