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)
你可以在没有递归的情况下完成.正则表达式"(.)\\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)
有了它,它适用于所有角色.