java - Java 正则表达式按值提取和替换
问题描述
输入字符串
${abc.xzy}/demo/${ttt.bbb}
test${kkk.mmm}
结果 World/demo/Hello testSystem
大括号内的文本是我的属性的关键。我想用运行时值替换这些属性。
我可以执行以下操作来获取正则表达式匹配,但是我应该在替换逻辑中添加什么来更改 ${..} 与输入字符串中的相应运行时值匹配。
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
推荐阅读
- selenium-webdriver - 如何检查机器人框架中应禁用的元素?
- r - 选择具有负值的数据框中的列
- python - 如何编写一个程序来找到最大的 4 位素数,其数字总和也是素数?
- firebase - 颤振和firebase错误无效的dep文件内核快照.d
- interface - 设备接口的 IP 地址
- javascript - 当您想在移动视图上查看时将卡片堆叠在一起时如何修复 CSS?
- python - “AutoTrackable”对象没有属性“output_shapes”
- awk - 使用 awk 打印已排序的输出以避免管道排序命令
- c# - FluentAssertions 对象图比较,包括 JSON 对象
- c++ - C++ 替代 rust 的 proc 宏