(我的其他答案可能只有当你已经有用使用支柱。)
与sdb的答案类似,我有s apache JEXL。
的UnifiedJEXL
类提供类似模板的功能,所以你可以写(as shown in javadocs):
JexlEngine jexl = new JexlEngine();
UnifiedJEXL ujexl = new UnifiedJEXL(jexl);
UnifiedJEXL.Expression expr = ujexl.parse("Hello ${user}");
String hello = expr.evaluate(context, expr).toString();
(该expr
不仅长相奇特被作为参数传递给在它自己的方法,但确实不需要作为一个参数)
的上下文设置在同一页前面所示:
// Create a context and add data
JexlContext jc = new MapContext();
jc.set("foo", new Foo());
ÿ你还需要commons-logging,或者你可以配置JEXL来使用你自己的记录器。
所以要亲近你问什么,你可以创建:
public class Formatter {
public static String format(String format, Object ... inputs) {
JexlContext context = new MapContext();
for (int i=0;i<inputs.length;i++) {
context.set("_" + (i+1), inputs[i]);
}
JexlEngine jexl = new JexlEngine();
UnifiedJEXL ujexl = new UnifiedJEXL(jexl);
UnifiedJEXL.Expression expr = ujexl.parse(format);
return expr.evaluate(context).toString();
}
}
与
String someString = "Your value is ${_1.myValue}.";
String result = Formatter.format(someString, new MyClass());
在这一点称呼它,result
是"Your value is foo."
幸运会有它,我们已经在我们的依赖树中有JUEL,所以它就是JUEL。谢谢! – 2010-03-31 20:37:13