我正在尝试在 android 中使用 block 。我需要这样的东西:
假设,
以下是标签。
标签: {"world":"WORLD", "c": "Dennis Ritchie", "apple":"JOBS"
输入: HELLO {{ world }},C是{{ c }}写的,java是{{ java }}写的,hola.
输出:HELLO WORLD,C 语言由 Dennis Ritchie 编写,而 java 由 hola 编写。
简而言之
我需要一个自定义分隔符,例如 {{ string }} 即
DEFAULT_TAG_START = "{{";
DEFAULT_TAG_END ="}}";
如果输入包含未指定的标签,则应将其替换为空。
我尝试并坚持跟随,
public String process(String msg) {
Chunk c = new Chunk();
c.append(msg);
c.set("apple", "JOBS");
c.set("c", "Dennis Ritchie");
c.set("world", "WORLD");
return c.toString();
}
最佳答案
Chunk 模板引擎目前不支持替代标记语法。此外,标签标记中的空格不会被忽略/丢弃。
不过,这里有一个可能的桥接解决方案。只要标签名称后跟冒号,未提供的 block 标签将默认为空。
因此您的输入必须更改为有效的 block 语法:
HELLO {$world:}, C is written by {$c:}, while java is written by {$java:}, hola.
如果你的模板语法不灵活(例如,你有一个预先存在的模板库,或者你真的不喜欢原生标签语法)你可以添加一个预处理步骤来转换 {{ this } }
到 {$this:}
,然后将其附加到 Chunk 模板。
Chunk 库甚至提供了一个方便的函数来为您执行此操作(尽管如果输入与空格不一致,您可能需要重新实现它)。
import com.x5.template.TemplateSet;
...
Chunk c = new Chunk();
String template = TemplateSet.convertTags(msg, "{{ ", " }}", "{$", ":}");
c.append(template);
c.set("apple", "JOBS");
c.set("c", "Dennis Ritchie");
c.set("world", "WORLD");
return c.toString();
关于java - 在带有自定义标签的android中使用 block 模板引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24238187/