递归替换所有java
我试图在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.
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".
}