如何解决当值在变量中时,Java使用replaceAll替换大括号字符串,Java 8 Matcher.quoteReplacement(String)
我有一个变量:
String content = "<xxx.xx.name>xxx.xxx.com:111</xxx.xx.name>";
String destination = "\\$\\{VAR\\}";
String source = "xxx.xxx.com:111";
content = content.replaceAll(source,destination);
结果:
result = {IllegalArgumentException@781} Method threw 'java.lang.IllegalArgumentException' exception.
detailMessage = "Illegal group reference"
cause = {IllegalArgumentException@781} "java.lang.IllegalArgumentException: Illegal group reference"
stackTrace = {StackTraceElement[5]@783}
suppressedExceptions = {Collections$UnmodifiableRandomAccessList@773} size = 0
但如果我这样做:
content = content.replaceAll(source,"\\$\\{VAR\\}");
一切正常。如何模仿或修复replaceAll?
解决方法
摘自String.replaceAll(String,String)
的文档:
请注意,替换字符串 中的反斜杠(\)和美元符号($)可能导致结果与被视为文字替换时的结果不同字符串;
强调 可能会失败,具体取决于您的Java版本(尽管我无法重现Java 8、11、12,15甚至早期访问{ {3}})
您可以使用Java 16来替换替换字符串中的\和$字符,如稍后在javadoc中所述:
如果需要,使用Matcher.quoteReplacement(java.lang.String)取消显示这些字符的特殊含义。
因此将您的代码更改为此(假设您要用${VAR}
而不是\${VAR\}
替换内容)
String content = "<xxx.xx.name>xxx.xxx.com:111</xxx.xx.name>";
String destination = Matcher.quoteReplacement("${VAR}");
String source = "xxx.xxx.com:111";
content = content.replaceAll(source,destination);
这将导致:
<xxx.xx.name>${VAR}</xxx.xx.name>
Matcher.quoteReplacement(String)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。