我有这样的字符串" aaaabbbccccaaddddcfggghhhh"我想删除重复的字符得到这样的字符串" abcadcfgh"。
对此的简单实现是:
for(Character c:str.toCharArray()){
if(c!=prevChar){
str2.append(c);
prevChar=c;
}
}
return str2.toString();
是否有可能使用正则表达式更好的实现?
答案 0 :(得分:6)
你可以这样做:
"aaaabbbccccaaddddcfggghhhh".replaceAll("(.)\\1+","$1");
正则表达式使用反向引用和捕获组。
正常的正则表达式是(.)\1+
,但你必须通过java中的另一个反斜杠来逃避反斜杠。
如果您想要多个重复字符:
String test = "aaaabbbccccaaddddcfggghhhh";
System.out.println(test.length() - test.replaceAll("(.)\\1+","$1").length());
答案 1 :(得分:2)
使用正则表达式,您可以使用替换字符串(.)\1+
替换$1
。
答案 2 :(得分:2)
您可以使用Java的字符串。replaceAll()
方法简单地使用正则表达式执行此操作。
String s = "aaaabbbccccaaddddcfggghhhh";
System.out.println(s.replaceAll("(.)\\1{1,}", "$1")) //=> "abcadcfgh"
正则表达式
( group and capture to \1:
. any character except \n
) end of \1
\1{1,} what was matched by capture \1 (at least 1 times)
答案 3 :(得分:1)
使用此模式/(.)(?=\1)/g
并替换为任何内容
Demo