java regex用单个替换单词中的任何双字母

时间:2014-08-10 00:05:54

标签: java regex string

我已经搜索了好几个小时但找不到答案,如果之前已经回答,我道歉。

我试图检查邮件中的每个单词是否包含任何双字母并删除多余的字母,例如墙壁或玩偶等单词会变成wal或dol。目的是为游戏进行虚假的语言翻译,到目前为止,我只能识别双重字母,但不知道如何替换它们。

到目前为止,这是我的代码:

public String[] removeDouble(String[] words){
    Pattern pattern = Pattern.compile("(\\w)\\1+");
    for (int i = 0; i < words.length; i++){
        Matcher matcher = pattern.matcher(words[i]);
        if (matcher.find()){
            words[i].replaceAll("what to replace with?");
        }
    }
    return words;
}

2 个答案:

答案 0 :(得分:3)

如果使用反向引用,则可以在一个语句中执行整个替换操作:

for (int i = 0; i < words.length; i++)
    words[i] = words[i].replaceAll("(.)\\1", "$1");

请注意,您必须分配从(看起来)更改字符串的字符串方法返回的值,因为它们返回新字符串而不是改变字符串。

答案 1 :(得分:2)

String.replaceAll不会就地修改字符串。 (Java String是不可变的)您需要返回返回的值。

String.replaceAll接受两个参数。

替换以下行:

words[i].replaceAll("what to replace with?");

使用:

words[i] = "what to replace with?";