JavaReplaceAll

JavaReplaceAll,java,regex,string,replaceall,Java,Regex,String,Replaceall,当我使用String.replaceAll(String,String)时,我注意到用$符号替换字符串是行不通的。示例$REPLACEME$在Linux系统中不会被替换。有人知道这是为什么吗 一些代码: String foo = "Some string with $REPLACEME$"; foo = foo.replaceAll("$REPLACEME$", "characters"); System.out.println(foo); 输出: Some string with $REPL

当我使用
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$

$
是需要转义的特殊字符:

foo = foo.replaceAll("\\$REPLACEME\\$", "characters");
或者更普遍地使用
模式。quote
将所有元字符(特殊字符,如
$
)转义为字符串文字:

foo = foo.replaceAll(Pattern.quote("$REPLACEME$"), "characters");

replaceAll
使用正则表达式作为其第一个参数
$
是与正则表达式中匹配字符串的结尾匹配的锚字符,因此需要转义

foo = foo.replaceAll("\\$REPLACEME\\$", "characters");
该方法使用,并且
$
字符是表示字符串结尾的正则表达式中的元字符。但是,该方法还使用替换字符串替换目标字符串的所有实例,并使用普通字符串,而不是正则表达式。这将满足您的期望:

String foo = "Some string with $REPLACEME$";
foo = foo.replace("$REPLACEME$", "characters");
System.out.println(foo);

为什么需要转义呢?这意味着一行的结束。因此,除非在字符串的开头有一个字符串结尾…+1表示
模式。quote
,我已经在考虑答案了。感谢
模式。quote
我还要补充一点,在纯正则表达式中,必须转义
\$
,但在Java中转义字符必须转义,因此
\\$
。为什么要使用
replaceAll
而不是
replace
?你需要正则表达式吗?