使用正则表达式替换字符串中单词的所有出现

VJu*_*une 2 java regex string replace

有没有简单的方法来替换字符串中所有出现的(整个)单词?我目前正在使用它,它不是很优雅:

public static String replace(String input, String toReplace, 
                           String replacement){
    if(input==null) throw new NullPointerException();
    input = input.replace(" "+toReplace+" ", " "+replacement+" ");
    input = input.replaceAll("^"+toReplace+" ", replacement+" ");
    input = input.replaceAll(" "+toReplace+"$", " "+replacement);
    return input;
}
Run Code Online (Sandbox Code Playgroud)

此外,正则表达式"^"+toReplace+" "不是正则表达式安全.例如:当它可能包含如下字符[或(等.

编辑:

这个代码有什么原因:

public static String replace(String input, String toReplace, 
                           String replacement){
    if(input==null) throw new NullPointerException();
    input = input.replace(" "+toReplace+" ", " "+replacement+" ");
    input = input.replaceAll(Pattern.quote("^"+toReplace+" "), replacement+" ");
    input = input.replaceAll(Pattern.quote(" "+toReplace+"$"), " "+replacement);
    //input = input.replaceAll("\\b" + Pattern.quote(toReplace) + "\\b", replacement);
    return input;
}
Run Code Online (Sandbox Code Playgroud)

在以下情况下表现如下:

    input = "test a testtest te[(st string test";
    input = replace(input, toReplace, "REP");
    System.out.println(input);
Run Code Online (Sandbox Code Playgroud)

a)toReplace = test打印:

test a testtest te[(st string test
Run Code Online (Sandbox Code Playgroud)

b)toReplace = te[(st打印:

test a testtest REP string test
Run Code Online (Sandbox Code Playgroud)

谢谢,

Exp*_*lls 5

使用单词边界\b并Pattern.quote逃脱.

return input.replaceAll("\\b" + Pattern.quote(toReplace) + "\\b", replacement);
Run Code Online (Sandbox Code Playgroud)

什么\\b表示一个单词和一个非单词字符之间的零宽度边界,包括字符串的开头和结尾.

  • 无需捕获和重写`\\ b`,它们是零长度的. (2认同)