You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

String.replaceFirst处理含$符号参数报错,请求技术协助

解决replaceFirst()抛出Illegal group reference异常的问题

这个坑我之前踩过!问题根源在于你用来替换的userKey里包含$符号——String.replaceFirst()的第二个参数是支持正则分组引用的,$在这里是特殊字符,会被解析为正则分组的引用标记。而你的$$maryann$$里的$并没有对应的正则分组,所以JVM就抛出了Illegal group reference异常。

给你几个可行的解决方案,按推荐程度排序:

1. 用Spring官方的UriComponentsBuilder处理(最推荐)

既然你在用RestTemplate,那肯定是Spring项目,用UriComponentsBuilder来构建带参数的URL是最规范的方式,它会自动处理所有特殊字符,完全不用手动转义:

String userKey = "$$maryann$$";
UriComponents uriComponents = UriComponentsBuilder.fromUriString("http://api.qal1.net/v3/fis/1234/getCustomer/{value}")
        .buildAndExpand(userKey);
String resourceURL = uriComponents.toUriString();

执行后得到的结果就是你想要的:http://api.qal1.net/v3/fis/1234/getCustomer/$$maryann$$

2. 用Matcher.quoteReplacement()转义替换字符串

如果你坚持要用replaceFirst(),可以用Matcher.quoteReplacement()把替换字符串里的特殊字符转义成普通字符:

import java.util.regex.Matcher;

String userKey = "$$maryann$$";
String resourceURL = "http://api.qal1.net/v3/fis/1234/getCustomer/{value}";
// 转义替换字符串中的特殊正则字符
String escapedUserKey = Matcher.quoteReplacement(userKey);
resourceURL = resourceURL.replaceFirst("\\{value\\}", escapedUserKey);

3. 用普通的String.replace()方法

如果你的URL里只有一个{value}需要替换,直接用replace()就好——这个方法是普通字符串替换,不涉及正则解析,所以$不会被当成特殊字符:

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

内容的提问来源于stack exchange,提问作者bharath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:23:31