当前位置: 首页 > 面试题库 >

替换Java中连续的重复字符

山越
2023-03-14
问题内容

我正在致力于Twitter数据标准化。Twitter用户经常使用诸如此类的术语来强调“爱”一词。我希望通过替换重复的字符,直到获得合适的有意义的词,将这样的重复字符变成一个适当的英语单词(我知道通过这种机制我无法区分善与恶)。

我的策略是

  1. 识别此类重复字符串的存在。我会寻找两个以上相同的字符,因为可能没有一个英文单词包含两个以上的重复字符。
        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 ");
         }
    }
  1. 在诸如Wordnet之类的词典中搜索此类单词

  2. 替换两个重复字符之外的所有字符,然后检入Lexicon

  3. 如果不在词典中,请删除另一个重复字符(否则将其视为拼写错误)。

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

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

System.out.println(data.replaceAll("([a-zA-Z])\\1{1,}", "$1"));

编辑:WiktorStribiżew提供的解决方案可以在Java中完美运行。我想知道需要什么更改才能在python中获得相同的结果。Python使用re.sub。


问题答案:

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

String twoConsecutivesOnly = data.replaceAll(regex, "$1$1");
String noTwoConsecutives = data.replaceAll(regex, "$1");

请参阅Java演示。

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

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

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


 类似资料:
  • 示例: 1)“aaabbaa”:b和a 2)“aabbaa”:a和b和a 3)“abba”:b 我尝试的代码: String str=“aabbbbcccd”; Pattern p=Pattern.compile(“(\w){2}”); 匹配器m=p.Matcher(str); 当(m.find()) { system.out.println(M.group(1)); } 输出: A B B C

  • 我想从字符串中消除连续重复,如 这是我的密码 我得到了错误非穷举模式,我想这是第二行的错误,当只剩下1个字符时,程序不知道如何处理。我该怎么修?

  • 如何删除字符串中任意位置的圆括号?

  • 如何使用bash将字符串中的替换为? 例如: txt文件包含如下文本: 这必须转化为: 我试过了 但这不管用。 这是怎么回事?

  • 我是Java的新手,正在学习/尝试用流来理解系统。 在一个示例中,我有以下代码: 出于培训的目的,我开始用流重写一些旧方法(大多数是用for-loops)以获得更多的实践。但是这个小方法让我用javadocs(+Google)坚持了三次以上,我仍然不知道哪里出了问题--它甚至不能编译:/ 编辑(01.12.2020,10:13):我不得不编辑第一个代码段。返回语句错误(错别字……)

  • 问题内容: 我试图写将接受的方法,检查是否有某些记号的情况下(例如,,等),并更换每个令牌与新的字符串,它是从获取。 例如,如果我将此方法传递给以下字符串: “现在的$ {fizz}母牛如何。$ {buzz}的形状奇怪的$ {foo}。” 并且如果该方法参考了以下内容: 那么结果字符串将是: “现在是棕色的母牛。纵火犯的脚怪异。” 这是我的方法: 运行此命令时,出现以下异常: 我为什么得到这个?