首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >替换java中的连续重复字符

替换java中的连续重复字符
EN

Stack Overflow用户
提问于 2017-04-25 16:23:04
回答 2查看 5.7K关注 0票数 2

我正在做twitter数据的规范化工作。推特用户经常使用诸如ts I looooooove这样的术语来强调爱这个词。我想把这些重复的字符替换成一个合适的英文单词,直到我得到一个合适的有意义的单词(我意识到我不能通过这种机制来区分上帝和善)。

我的策略是

  1. 识别这种重复字符串的存在。我会寻找超过2个相同的字符,因为可能没有超过两个重复字符的英语单词。

String[]字符串={“”,"good","OK","boolean","mee","claaap“};string regex = "(a-z)\1{2,}";pattern Pattern = Pattern.compile(regex);for (String : String ){ matcher Matcher = pattern.matcher(string);if (matcher.find()) { System.out.println(string+”TRUE ");}}

  • 在像Wordnet

  • Replace这样的词典中搜索除两个这样的重复字符之外的所有单词,如果词典中不存在,请检查词典

  • ,删除多一个重复字符(否则视为拼写错误)。

由于我的Java知识很差,我无法处理3和4。问题是我不能替换所有的字符,只能替换两个重复的连续字符。以下代码片段将替换除一个重复字符以外的所有字符System.out.println(data.replaceAll("([a-zA-Z])\\1{2,}", "$1"));

需要帮助才能找出A。如何替换除2个连续重复字符之外的所有字符B。如何从A的输出中删除多一个连续字符我认为B可以通过以下代码片段进行管理

代码语言:javascript
复制
System.out.println(data.replaceAll("([a-zA-Z])\\1{1,}", "$1"));

编辑:由Wiktor Stribiżew提供的解决方案在Java中完美工作。我想知道在python中需要做哪些更改才能得到相同的结果。Python使用re.sub。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-25 17:06:36

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

代码语言:javascript
复制
String twoConsecutivesOnly = data.replaceAll(regex, "$1$1");
String noTwoConsecutives = data.replaceAll(regex, "$1");

请参阅Java demo

如果需要使正则表达式不区分大小写,可以使用"(?i)([a-z])\\1{2,}"甚至"(\\p{Alpha})\\1{2,}"。如果必须处理任何Unicode字母,请使用"(\\p{L})\\1{2,}"

BONUS:在一般情况下,要替换任意数量的重复连续字符,请使用

代码语言:javascript
复制
text = text.replaceAll("(?s)(.)\\1+", "$1");   // any chars
text = text.replaceAll("(.)\\1+", "$1");       // any chars but line breaks
text = text.replaceAll("(\\p{L})\\1+", "$1");  // any letters
text = text.replaceAll("(\\w)\\1+", "$1");     // any ASCII alnum + _ chars
票数 2
EN

Stack Overflow用户

发布于 2018-07-27 04:19:08

代码语言:javascript
复制
/*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

            }
            }


        }

    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43605292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档