我正在使用MessageFormat使用如下模板格式化一些地址:
"{0}\n{1}\n{2}\n{3}, {4} {5}"
哪里
0 =街道1
1 =街道2
2 =街道3
3 =城市
4 =状态
5 =拉链
捕获时,大多数这些字段都是可选的.例如,如果没有街道3,我该如何避免空行?我可以使用这样的模板"{0} {1} {2} {3} {4} {5}",然后相应地替换"street 3 \n"或"",但模板不提供对格式化有很大好处.
有没有办法在格式字符串中包含条件?或者是否有另一种,最好是轻量级的模板工具,它支持条件格式化?
编辑:重写......
如果您不关心设计,那么您可以随意选择模板引擎,或者因为您喜欢它的名称,或者其他什么.如果您没有选择引擎的标准,那么谁在乎您选择哪一个?
另一方面,如果您关心设计,例如使用模型 - 视图 - 控制器(MVC)设计模式,那么您的选择会迅速减少.
这里的大多数答案都强调了各种模板引擎的强大功能.但MVC的重点在于你不想做更多,因为在你的模板中做更多事情最终会让你非常伤心.业务逻辑不属于View,它属于Model.控制逻辑属于控制器.实际上只有一个模板引擎强制执行MVC模式.如果你不想要MVC模式(也许你正在超越它),那一个引擎仍然可以帮助你不伤害自己并鼓励你正确地划分你的功能.
实际上只有一个好的模板引擎: StringTemplate.有关原因的详细信息,请参见http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf.
我在多个平台(Python,Java,.Net)以及许多替代方案和StringTemplate规则上使用过它.
做出决定.请享用.最好的祝愿.
其他人提到了字符串模板,但我们最近切换到MVEL(它也做了更多,但实际上并没有增加太多的重量):http://mvel.codehaus.org/(我发现它更容易使用).