当我使用String.replaceAll(String, String)时,我注意到用$符号替换字符串是行不通的。示例$REPLACEME$不会在Linux系统中被替换。有人知道这是为什么吗?
一些代码:
String foo = "Some string with $REPLACEME$";
foo = foo.replaceAll("$REPLACEME$", "characters");
System.out.println(foo);输出:
Some string with $REPLACEME$发布于 2014-10-08 20:24:44
$是一个需要转义的特殊字符:
foo = foo.replaceAll("\\$REPLACEME\\$", "characters");或者更一般地使用Pattern.quote,它将将所有元字符(如$和?等特殊字符)转义为字符串文本:
foo = foo.replaceAll(Pattern.quote("$REPLACEME$"), "characters");发布于 2014-10-08 20:24:57
replaceAll使用正则表达式作为其第一个参数。$是一个锚点字符,它与regex中匹配的字符串的末尾匹配,因此需要转义。
foo = foo.replaceAll("\\$REPLACEME\\$", "characters");发布于 2014-10-08 20:33:57
replaceAll方法使用正则表达式,$字符是正则表达式中的元字符,表示字符串的结尾。但是,replace方法也用替换字符串替换目标字符串的所有实例,并且使用一个普通字符串,而不是正则表达式。这将实现你期望的结果:
String foo = "Some string with $REPLACEME$";
foo = foo.replace("$REPLACEME$", "characters");
System.out.println(foo);https://stackoverflow.com/questions/26265752
复制相似问题