我正在尝试替换像这样的
字符串表达式中的所有$字符带有s $的字符串示例和带有$ s的另一个字符串的示例,这里是结尾。
以便$字符被空格包围。
我试过string.replaceAll("$", " $ ");
这会导致非法的Argument Exception。
当我尝试像这样逃避$字符时:
string.replaceAll("\$", " $ "); I get an invalid escape sequence error before I even build.
当我尝试以下操作时:
string.replaceAll("\\$", " $ "); I get an illegal argument exception again.
最后当我尝试这个时:
string.replaceAll("\\\\$", " $ ");
它对字符串完全没有影响。我知道这是愚蠢的,我只是没有得到。任何人都可以帮忙吗?
答案 0 :(得分:5)
两边都需要两个斜杠
string.replaceAll("\\$", " \\$ ");
第一个转义将传递给正则表达式的第二个斜杠。然后表达式是“\ $”,它与$符号匹配。你想用相同的替换它。
你必须转义第二个参数,因为虽然它不是正则表达式,但是根据文档,\和$符号是一个特例:
请注意,替换字符串中的反斜杠()和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同;见Matcher.replaceAll。如果需要,使用Matcher.quoteReplacement(java.lang.String)来抑制这些字符的特殊含义。
答案 1 :(得分:2)
如果您不需要将参数视为regexp,请使用replace()
而不是replaceAll()
(它也会替换第一个参数的所有出现,但不会将其视为regexp) :
string.replace("$", " $ ");
答案 2 :(得分:0)
尝试string.replaceAll("\\$", " \\$ ")
。
答案 3 :(得分:0)
你必须在替换字符串中使用$符号的原因是因为String#replaceAll()方法在引擎盖下使用了Matcher#replaceAll()。直接来自后者的Javadoc:
请注意反斜杠(\)和 美元符号($)在 替换字符串可能会导致 结果与它不同 被视为文字 替换字符串。美元符号可能 被视为被捕获的参考 如上所述的子序列,和 反斜杠用于逃避文字 替换字符串中的字符。