String.replaceFirst不适用于带符号的参数

时间:2018-01-16 11:02:03

标签: java string

我正在尝试在执行restTemplate.exchange之前从url替换参数,如下所示。

String userKey = "$$maryann$$";
String resourceURL = 
       "http://api.qal1.net/v3/fis/1234/getCustomer/{value}"                           

resourceURL = resourceURL.replaceFirst("\\{" + "value" + "\\}", userKey);

投掷以下错误,

java.lang.IllegalArgumentException: Illegal group reference
at java.util.regex.Matcher.appendReplacement(Matcher.java:857)
at java.util.regex.Matcher.replaceFirst(Matcher.java:1004)
at java.lang.String.replaceFirst(String.java:2178)

我希望结果字符串为

http://api.qal1.net/v3/fis/1234/getCustomer/$$maryann$$

你能帮忙吗?

1 个答案:

答案 0 :(得分:3)

replaceFirst使用正则表达式(regex)语法,其中$是特殊符号:

  • 在您想要匹配的内容(目标)的描述中,它代表字符串的结尾,
  • 在替换部分中,它可用于访问来自第n组的匹配,例如$n

所以你需要逃避它。您可以通过\$手动执行此操作(在字符串文字中需要看起来像"\\$",因为\在那里也很特殊),或者您可以使用可以为您逃脱它的方法< / p>

str = str.replaceFirst(Pattern.quote(yourTarget), Matcher.quoteReplacement(yourReplacement);