gpt4 book ai didi

带有正则表达式的 Java lambda 不产生精确的字符串结果

转载 作者:行者123 更新时间:2023-12-02 03:44:16 25 4
gpt4 key购买 nike

此 java lambda 将以 $( 开头并以 ) 结尾的字符串替换为 Map 中的预定义值:

SortedMap<String, String> map = new TreeMap<String, String>();
map.put("test", "REPLACE");
String update = Arrays.stream("$(test) (test) (test2)".split("\\(\\$|\\)"))
.map(token -> map.getOrDefault(token, token))
.collect(Collectors.joining(""));

System.out.println(update);

这会打印REPLACE (test (test2

这几乎按预期工作,但右括号已从 (test & (test2 ) 中删除。我是否需要更新正则表达式,或者可以将 lambda 修改为生产:

替换(测试)(test2)

最佳答案

您可以通过 map 上的流减少来完成此操作keySet

public static String replaceKeywords(
final String template,
final Map<String, String> map
) {
return map.keySet().stream().reduce(template,
(acc, key) -> acc.replaceAll("\\$\\(" + key + "\\)", map.get(key)));
}

用法:

Map<String, String> map = new TreeMap<String, String>();
map.put("test", "FOO");
map.put("test2", "BAR");

System.out.println(replaceKeywords("$(test) $(test2) (test2)", map));

输出:

FOO BAR      (test2)

关于带有正则表达式的 Java lambda 不产生精确的字符串结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36484655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com