我正在尝试将 StringTemplate.v4 用于简单的模板,这意味着只有简单的间隙名称,例如%body%
-- 我没有使用任何其他功能,例如 if-logic、子模板或表达式。
(老实说,它的API文档记录很差,此时我正在考虑完全放弃它。如果有 JavaDoc源代码链接会很好,所以至少我可以自己挖掘并解决问题。真的很沮丧.)
我正在尝试确定匿名模板中存在的差距,以在尝试使用它之前验证它是否具有所需的差距。
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import org.stringtemplate.v4.ST;
import org.stringtemplate.v4.compiler.FormalArgument;
public class GapsInAnST {
public static final void main(String[] ignored) {
ST tmpl = new ST("Hello %name%. You are %age% years old.", '%', '%');
Map<String,Object> gapMap = tmpl.getAttributes();
System.out.println("gapMap=" + gapMap);
if(gapMap != null) {
System.out.println("getAttributes()=" + Arrays.toString(gapMap.keySet().toArray()));
}
System.out.println("tmpl.impl.hasFormalArgs=" + tmpl.impl.hasFormalArgs);
Map<String,FormalArgument> formalArgMap = tmpl.impl.formalArguments;
if(formalArgMap != null) {
System.out.println("getAttributes()=" + Arrays.toString(formalArgMap.keySet().toArray()));
}
tmpl.add("name", "Seymour");
tmpl.add("age", "43");
System.out.println(tmpl.render());
}
}
输出:
gapMap=null
tmpl.impl.hasFormalArgs=false
Hello Seymour. You are 43 years old.
我发现了为什么在这个谷歌组线程getAttributes()
中返回,以及关于这个问题:StringTemplate list of attributes defined for a given template)。null
formalArguments
那么,在填补任何空白之前,如何获得匿名模板中实际存在的所有空白呢?我意识到我可以用 regex做到这一点,但我希望有一种内置的方式来做到这一点。
谢谢。