输入字符串

${abc.xzy}/demo/${ttt.bbb}
test${kkk.mmm}

结果
世界/演示/你好
测试系统

大括号内的文本是我的属性的关键。我想用运行时值替换那些属性。

我可以执行以下操作来获取正则表达式匹配项,但是我应该在替换逻辑中添加什么以更改与输入字符串中的各个运行时值匹配的$ {..}。
Pattern p = Pattern.compile("\\{([^}]*)\\}");
Matcher m = p.matcher(s);
while (m.find()) {
  // replace logic comes here
}

最佳答案

另一种选择是使用第三方库,例如Apache Commons Text。
他们的StringSubstitutor类看起来非常有前途。

Map valuesMap = HashMap();
valuesMap.put("abc.xzy", "World");
valuesMap.put("ttt.bbb", "Hello");
valuesMap.put("kkk.mmm", "System");

String templateString = "${abc.xzy}/demo/${ttt.bbb} test${kkk.mmm}"
StringSubstitutor sub = new StringSubstitutor(valuesMap);
String resolvedString = sub.replace(templateString);

有关更多信息,请查看Javadoc https://commons.apache.org/proper/commons-text/javadocs/api-release/org/apache/commons/text/StringSubstitutor.html

10-06 14:39