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
相关产品推荐
相关产品推荐

