java - 用斜杠替换文字的 Java 把手
问题描述
我想在java中使用handlerbars(com.github.jknack)来替换字符串中的值,如下所示:
@Test
public void handlebarTest() throws IOException {
var map = new HashMap<String, Object>();
var input = "testing handlerbars {{ test }} - {{ foo/bar }}";
var handlebars = new Handlebars();
map.put("test","testValue");
map.put("foo", new HashMap<>().put("bar", "fooValue")); //does not work
map.put("foo/bar", "fooValue"); //does not work
Template template = handlebars.compileInline(input);
var result = template.apply(map);
System.out.println(result);
}
这个测试的输出是: testing handlerbars testValue -
预期的输出将是: testing handlerbars testValue - fooValue
当文字是简单的 ( {{ test }}
) 时,替换工作正常,但当文字包含斜线 ( ) 时,它不起作用{{ foo/bar }}
。有没有办法用车把替换"foo/bar"
字符串"fooValue"
?
解决方案
HashMap 官方文档说明了以下关于 的返回值HashMap#put
:
返回:与 key 关联的前一个值,如果没有 key 映射,则返回 null。(返回 null 还可以指示映射先前将 null 与 key 关联。)
这意味着new HashMap<>().put("bar", "fooValue")
它将始终评估为空。
为了解决这个问题,您当然可以执行以下操作:
var fooMap = new HashMap<String, String>();
fooMap.put("bar", "fooValue");
map.put("foo", fooMap);
但是,从 Java 9 开始,最常见的集合(Set、List 和 Map)都有静态工厂方法。使用这些新的工厂方法,您可以new HashMap<>().put("bar", "fooValue")
用Map.of("bar", "fooValue")
which 创建一个不可变的Map 与一个条目 ( "bar"
-> "fooValue"
) 替换。
这应该可以正常工作,因此您可以安全地删除该行map.put("foo/bar", "fooValue"); // does not work
。
推荐阅读
- web-services - IIB SOAP 用户密码 提供者端认证
- android - 当意图传递给其他活动时,为什么从 parcelable 中得到错误的值?
- html - 类型更改后页脚部分不再居中
- python-3.x - Python 多线程与 pynput.keyboard.listener
- javascript - 值从 React 中的其他组件更改后,useEffect 不会更新
- javascript - 表格单元格上的 Angular mousedown/mouseover
- c# - 如何将自动显示面板放在 LibVLCSharp.WPF.VideoView 上?
- node.js - 如何在 node.js 上获取类的属性及其方法
- ckeditor - 覆盖 CKEditor 5 内容编辑 css
- npm - 在 bitbucket-pipeline 中运行 nuxt.js 会引发“未定义”错误