我正在寻找一种方法来删除连续第4次出现的字符(a-zA-Z) 。
例如,如果我有以下字符串:
helloooo I am veeeeeeeeery busy right nowww because I am working veeeeeery hard
我希望连续删除所有第4,第5,第6,......字符。但是,在单词hard
中,出现了第4个r
,我不想删除它,因为它不是连续的第4个r
/它被其他字符包围。结果应该是:
hellooo I am veeery busy right nowww because I am working veeery hard
我已经找到了一种方法来做到这一点,我本来可以找到一种方法来替换/删除第4次出现的字符,但我找不到替换/删除第4次出现的字符的方法<我>连续。
提前致谢。
答案 0 :(得分:3)
该功能可以这样写:
public static String transform(String input) {
if (input.isEmpty()) {
return input;
} else {
final StringBuilder sb = new StringBuilder();
char lastChar = '\0';
int duplicates = 0;
for (int i = 0; i < input.length(); i++) {
final char curChar = input.charAt(i);
if (curChar == lastChar) {
duplicates++;
if (duplicates < 3) {
sb.append(curChar);
}
} else {
sb.append(curChar);
lastChar = curChar;
duplicates = 0;
}
}
return sb.toString();
}
}
我认为它比正则表达式更快。</ p>
答案 1 :(得分:2)
你想要的正则表达式是((.)\2{2})\2*
。不太确定Java-ese中的内容,但它的作用是匹配任何单个字符,然后匹配该字符的另外两个实例,后跟任意数量的其他实例。然后用第一个捕获组(\1
)的内容替换它,你就可以了。
答案 2 :(得分:2)