Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
递归替换所有java_Java_Regex_Recursion - Fatal编程技术网

递归替换所有java

递归替换所有java,java,regex,recursion,Java,Regex,Recursion,我试图在Java中替换字符串中所有重复的字符,并且只允许一个 例如: aaaaa-->a 为此,我尝试使用replaceAll方法: "aaaaa".replaceAll("a*","a") //returns "aa" 我开发了一种递归方法,可能效率不高: public String recursiveReplaceAll(String original,String regex, String replacement) { if (original.equals(original.

我试图在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);
}

这个方法很有效,我只是想知道是否有什么东西使用了RegEx,例如,它的工作性能更好。

您的
replaceAll
方法几乎是正确的-只是
*
匹配0次。您希望
+
表示“一个或多个”


你可以不用递归就可以做到。正则表达式
“(..\\1+”
将自动删除每个字符后面的字符,并用捕获的字符替换它们。因此,这将删除任何重复的字符

public static void main(String[] args) {
    String str = "aaaabbbaaa";
    String result = str.replaceAll("(.)\\1+", "$1");
    System.out.println(result); // prints "aba".
}
这样,它可以用于所有字符。

replaceAll(“a+”,“a”)
public static void main(String[] args) {
    String str = "aaaabbbaaa";
    String result = str.replaceAll("(.)\\1+", "$1");
    System.out.println(result); // prints "aba".
}