This question already has answers here:
Why does replaceAll fail with “illegal group reference”?
                                
                                    (8个答案)
                                
                        
                2年前关闭。
            
        

我正在尝试按如下所示从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使用正则表达式(regex)语法,其中$是特殊符号:


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


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

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

关于java - String.replaceFirst不适用于带有$符号的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48279707/

10-13 03:58