用一次出现替换多个连续出现的字符

时间:2013-11-24 05:54:53

标签: java string

我正在使用Java编写自然语言处理应用程序,我正在使用来自IMDB和亚马逊的数据。

我遇到了某个数据集,其中包含partyyyyy等字词。这些词对我的分类算法不利。因此,我想删除它们并添加party而不是partyyyyyyy

我该怎么做?

5 个答案:

答案 0 :(得分:10)

您可以使用正则表达式在其后至少两次查找具有相同字母的字母(因为我们不想在m中删除正确的字母,例如comma

String data="stoooooop partyyyyyy";
System.out.println(data.replaceAll("([a-zA-Z])\\1{2,}", "$1"));
//                                       |      |         |
//                                   group 1   match    replace with 
//                                             from     match from group 1
//                                             group 1
//                                             repeated 
//                                           twice or more

输出:

stop party

答案 1 :(得分:2)

我所知道的英语单词不止两个以上相同的字母。

  1. 迭代所有单词
  2. 如果单词有两个以上连续相同的字母,则:
    • 删除除了两个重复字母外的所有字母,并查看是否形成了有效字。
    • 否则,删除除一个重复的字母以外的所有字母,并查看是否形成了有效字。
    • 否则,失败。
  3. 这种方法捕获:

    • partyy

    • “stoop”(加上那个含糊不清!是“停止”加一个额外的“o”还是简单地“弯腰”)

答案 2 :(得分:1)

尝试使用循环,

 String word="Stoooppppd";
    StringBuilder res=new StringBuilder();
    char first=word.charAt(0);
    res.append(first);
    for (int i = 1; i < word.length(); i++) {
        char ch=word.charAt(i);
        if(ch!=first){
           res.append(ch);
        }
       first=ch;
    }
    System.out.println(res);

答案 3 :(得分:0)

您可能希望使用\ p {L} \ p {M} *而不是[a-zA-Z]来包含非英语的unicode字母。所以它会是这样的:replaceAll("(\\p{L}\\p{M}*)(\\1{" + maxAllowedRepetition + ",})", "$1");或者:replaceAll("(\\p{L}\\p{M}*)\\1{" + maxAllowedRepetition + ",}", "$1");

答案 4 :(得分:0)

您可以使用此代码段快速实现。

public static String removeConsecutiveChars(String str) {

        if (str == null) {
            return null;
        }

        int strLen = str.length();
        if (strLen <= 1) {
            return str;
        }

        char[] strChar = str.toCharArray();
        char temp = strChar[0];

        StringBuilder stringBuilder = new StringBuilder(strLen);
        for (int i = 1; i < strLen; i++) {

            char val = strChar[i];
            if (val != temp) {
                stringBuilder.append(temp);
                temp = val;
            }
        }
        stringBuilder.append(temp);

        return stringBuilder.toString();
    }