Java - 删除行中每个第4个字符

时间:2016-07-12 17:51:50

标签: java regex string

我正在寻找一种方法来删除连续第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次出现的字符的方法<我>连续。

提前致谢。

3 个答案:

答案 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)

在Java中,您可以根据反向引用使用此替换:

str = str.replaceAll("(([a-zA-Z])\\2\\2)\\2+", "$1");

Code Demo

RegEx Demo