Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java正则表达式将word中的任何双字母替换为单字母_Java_Regex_String - Fatal编程技术网

java正则表达式将word中的任何双字母替换为单字母

java正则表达式将word中的任何双字母替换为单字母,java,regex,string,Java,Regex,String,我已经搜索了几个小时,但找不到答案,如果以前有人回答过,我道歉 我试图检查邮件中的每个单词是否有双字母,并删除多余的字母,例如,像wall或doll这样的单词将变成wal或dol。其目的是为游戏提供一个虚假的语言翻译,到目前为止,我已经识别了双字母,但不知道如何替换它们 以下是我目前的代码: public String[] removeDouble(String[] words){ Pattern pattern = Pattern.compile("(\\w)\\1+"); f

我已经搜索了几个小时,但找不到答案,如果以前有人回答过,我道歉

我试图检查邮件中的每个单词是否有双字母,并删除多余的字母,例如,像wall或doll这样的单词将变成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;
}
public String[]removeDouble(String[]words){
Pattern=Pattern.compile(“(\\w)\\1+”);
for(int i=0;i
不会在位修改字符串。(Java字符串是不可变的)您需要重新分配返回值

String.replaceAll
接受两个参数

替换以下行:

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

不在位修改字符串。(Java字符串是不可变的)您需要重新分配返回值

String.replaceAll
接受两个参数

替换以下行:

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


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

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

请注意,您必须指定从(似乎)更改字符串的字符串方法返回的值,因为它们返回新字符串,而不是对字符串进行变异。

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

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

请注意,您必须指定从(似乎)更改字符串的字符串方法返回的值,因为它们返回新字符串,而不是对字符串进行变异。

这在我的代码中的其他地方很有帮助,谢谢大家!)@BrandenPatey,我推荐波西米亚的方式:
words[I]=words[I].replaceAll(“()\\1”,“替换什么?”)是的,但我没有想到要将替换词指定给[I]varthis,这在我正在编写的代码中的其他地方很有帮助,非常感谢!)@BrandenPatey,我推荐波西米亚的方式:
words[I]=words[I].replaceAll(“()\\1”,“替换什么?”)
是的,但我没有想到要将替换词指定给[I]varYes,
$1
是对捕获组的反向引用
(.)
,匹配模式也使用了对同一组的反向引用
\1
,在英语中表示“任何字符后跟同一字符”这是替换所有出现的双字母还是仅替换第一个出现的双字母?@BrandenPatey它替换所有出现的双字母。要仅替换第一个,请使用一个负的前瞻
replaceAll(“()\\1(?)*()\\2)”,“$1”)
,它声明在匹配后的输入中找不到双精度值是,
$1
是对捕获组的反向引用
()
,并且匹配模式也对同一组使用反向引用
\1
,在英语中,哪个词的意思是“任何字符后跟同一个字符”,它是替换任何双字母的所有出现,还是仅替换第一次出现?@BrandenPatey它替换所有出现。要仅替换第一个,请使用否定的前瞻
replaceAll(()\\1(?。*()\\2)”,“$1”)
,它声明在匹配后的输入中找不到双精度