【问题标题】:String.replaceFirst is not working for parameter with $ symbol [duplicate]String.replaceFirst 不适用于带有 $ 符号的参数 [重复]
【发布时间】:2018-01-16 11:02:02
【问题描述】:

我正在尝试在进行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$$

您能帮忙吗?

【问题讨论】:

  • 问题是replaceFirst() 对正则表达式进行操作,并且替换允许$groupnumber 形式的组引用。尝试逃避美元:resourceURL.replaceFirst( ..., Matcher.quoteReplacement( userKey ) );

标签: java string


【解决方案1】:

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

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

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

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

【讨论】:

  • 上述方法的结果为api.qal1.net/v3/fis/1234/getCustomer{GUID}。我无法从 $$maryann$$​​ 中转义 $,因为它是最终用户的用户 ID,并且我应该传递给 API。
  • 对我来说很好用:ideone.com/YRZ3P6
  • 谢谢!我没有将结果字符串分配回变量。现在工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 2017-06-24
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
相关资源
最近更新 更多