为什么带有自定义分隔符的StringTemplates不起作用?

时间:2011-11-27 15:39:58

标签: java template-engine stringtemplate

我正在尝试将字符串模板与自定义分隔符一起使用。

此代码段:

new ST("Hello @what@", '@', '@').add("what", "world").render()

抛出org.stringtemplate.v4.compiler.STException,所以我显然做错了。

如果我将其更改为new ST("Hello $what$", '$', '$'),则可以。为什么@无效?

修改 - 我尝试了$@以外的其他字符,除了$之外什么都没有。发生了什么事?

2 个答案:

答案 0 :(得分:0)

'$','<'等字符对于StringTemplate是特殊的,需要进行转义。

您可以创建一个转义工具,如:

ST st = new ST(StringUtility.escapeStringTemplate(str));

//utility function

public static String escapeStringTemplate(String str){
    String result = str;
    if (result.contains("<")) {
        result = result.replace("<", "\\<");
    }
    if (result.contains("$")) {
        result = result.replace("$", "\\$");
    }

    return result;
}

答案 1 :(得分:-1)

我认为他们必须是不同的角色;启动/停止。 叔