Java-替换字符串中所有出现的“ $ {”

糖浆:

我正在使用Java 1.8遍历包含这样定义的变量的文件。

<var name = "QUEUE_PREFIX" value = "TEST/QUEUE/PREFIX"   />
<var name = "IN_QUEUE"     value = "${QUEUE_PREFIX}/IN"  />
<var name = "OUT_QUEUE"    value = "${QUEUE_PREFIX}/OUT" />

<element>${IN_QUEUE}</element>

这应该导致

<var name = "QUEUE_PREFIX" value = "TEST/QUEUE/PREFIX"     />
<var name = "IN_QUEUE"     value = "TEST/QUEUE/PREFIX/IN"  />
<var name = "OUT_QUEUE"    value = "TEST/QUEUE/PREFIX/OUT" />

<element>TEST/QUEUE/PREFIX/IN</element>

这些变量的替换是使用此代码在内存中完成的。请注意,在继续文档主要部分的替换之前,我先替换了变量声明部分中的变量。

private static final String VAR_START = "\\$\\{"
private static final String VAR_END   = "\\}"

private String fileContent = readFile(path);
private Map<String, String> variables = getVarsFromFile();

private void replaceInVariables() {
   for(Entry<String, String> e : variables.entrySet()) {
      fileContent = fileContent.replaceAll(VAR_START + e.getKey() + VAR_END, e.getValue);
   } 
}

我从这里收到以下错误

named capturing group is missing trailing '}'

我的问题:

如何将“ $ {”和“}”作为文字字符串进行转义,以使其不将其用作正则表达式?

维基百科

这个问题是从动态(用户定义)更换可能包含${没有},因此正则表达式引擎会认为这是一个腐败的命名反向引用。

您可以保留定界符而不进行手动转义,并依靠Pattern.quote转义整个正则表达式模式和Matcher.quoteReplacement转义替换模式:

private static final String VAR_START = "${";
private static final String VAR_END   = "}";

// ...

fileContent = fileContent.replaceAll(Pattern.quote(VAR_START + e.getKey() + VAR_END), Matcher.quoteReplacement(e.getValue))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

替换字符串中所有出现的子字符串-在Java中哪个效率更高?

查找Java中字符串中所有出现的子字符串

替换所有出现的“ ;;” 在Java中的字符串中

替换Java中字符串中所有不一致的字符

从java中的字符串替换子字符串的所有出现

建议使用方法replaceAll重新替换Java字符串中所有文本实例

Java Regex:匹配字符串中所有重复出现的序列

如何在java中的字符串(由#,$ ..等特殊字符组成)之间替换所有出现的字符串(变量)

如何在Java中查找并替换出现在字符串中的所有子字符串?

Java字节数组替换所有出现的字节数组/字符串

使用Java替换所有出现的以特定模式开头的字符串

如何替换字符串中所有出现的字符?

用Java替换字符串中的所有“(”和“)”

替换 Java 中的字符串以获取所有变体

如何替换JavaScript中所有出现的字符串?

替换JavaScript中所有出现的字符串

替换数据框中所有出现的字符串

查找并替换范围中所有出现的字符串

如何替换 SQL 中所有出现的字符串

Python,替换字符串中所有出现的模式

剥离Java字符串中所有不可打印字符的最快方法

Java中数组列表中字符串中所有字符的组合,集合乘法

替换字符串中所有字母减去Java中的第一个和最后一个字母

Java替换所有方法附加替换字符串而不是替换

在Java中查找数组中所有字符串的组合

使用Java Stream检查List中所有字符串的大小(变量)

grep目录中所有.java文件的特定字符串

用于解析字符串中所有双精度的 Java 函数

用字符串java中的空字符替换所有“ +”字符