如何替换java中的连续重复字符?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (544)

我正在研究twitter数据规范化,Twitter用户经常使用像我这样的术语,以便强调爱这个词,我希望通过替换重复的字符直到我得到一个合适的有意义的单词来重复这些重复的字符到一个正确的英语单词

策略是

  1. 识别这种重复字符串的存在。我会寻找超过2个相同的字符,因为可能没有超过两个重复字符的英文单词 String[] strings = { "stoooooopppppppppppppppppp","looooooove", "good","OK", "boolean", "mee", "claaap" }; String regex = "([a-z])\\1{2,}"; Pattern pattern = Pattern.compile(regex); for (String string : strings) { Matcher matcher = pattern.matcher(string); if (matcher.find()) { System.out.println(string+" TRUE "); } }
  2. 在像Wordnet这样的词典中搜索这样的单词
  3. 替换除了两个这样的重复字符之外的所有字符并检查Lexicon
  4. 如果没有在Lexicon中删除一个重复的字符(否则将其视为拼写错误)。
System.out.println(data.replaceAll("([a-zA-Z])\\1{1,}", "$1"));
提问于
用户回答回答于

正则表达式([a-z])\\1{2,}匹配并将ASCII字母捕获到组1中,然后匹配此值的2次或更多次出现。因此需要使用反向引用替换所有内容$1,即保留捕获的值,如果使用一个$1,aaaaa将替换为单个a,如果使用$1$1,将被替换为aa

String twoConsecutivesOnly = data.replaceAll(regex, "$1$1");
String noTwoConsecutives = data.replaceAll(regex, "$1");
用户回答回答于
/*This code checks a character in a given string repeated consecutively 3 times
 if you want to check for 4 consecutive times change count==2--->count==3 OR
 if you want to check for 2 consecutive times change count==2--->count==1*/
public class Test1 {
    static char ch;
    public static void main(String[] args) {
        String str="aabbbbccc";
        char[] charArray = str.toCharArray();
        int count=0;
        for(int i=0;i<charArray.length;i++){
            if(i!=0 ){
            if(charArray[i]==ch)continue;//ddddee
            if(charArray[i]==charArray[i-1]) {
                count++;
                if(count==2){
                    System.out.println(charArray[i]);
                    count=0;
                    ch=charArray[i];
                }   
            }
            else{
                count=0;//aabb

            }
            }


        }

    }

}

扫码关注云+社区

领取腾讯云代金券