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)
谢谢,
使用单词边界\b并Pattern.quote逃脱.
return input.replaceAll("\\b" + Pattern.quote(toReplace) + "\\b", replacement);
Run Code Online (Sandbox Code Playgroud)
什么\\b表示一个单词和一个非单词字符之间的零宽度边界,包括字符串的开头和结尾.