2008-11-06 24 views
5

我使用的MessageFormat与这样的模板格式化一些地址:支持条件格式的Java中的任何轻量级模板解决方案?

"{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”或“”,但模板不提供格式化有很多好处。

有没有一种方法可以在格式字符串中包含条件?或者还有另外一种支持条件格式的轻量级模板工具吗?

回答

2

不知道你会如何轻量级地考虑它,但Apache Velocity是Java最着名的模板引擎之一。

1

您可以按照自己的方式进行格式设置,然后通过将单个'\n'的运行替换为单个'\n'(例如,

result = result.replaceAll("\n+", "\n"); 
+0

很简单的方法来解决问题 - 恕我直言,引入模板框架只是为了格式化地址是有点矫枉过正。 – 2009-01-08 19:52:36

7

编辑:重写...

如果不在乎设计,那么你就可以随手拿起一个模板引擎在随机的,或者因为你喜欢它的名字,或什么的。如果你没有选择引擎的标准,那么谁在乎你选择哪一个呢?另一方面,如果你确实在意设计,比如使用模型 - 视图 - 控制器(MVC)设计模式,那么你的选择很快就会减少。

这里的大多数答案都强调了各种模板引擎的强大功能。但是MVC的重点是你不想做更多的事情,因为在你的模板中做更多的事情最终会伤害你非常糟糕。业务逻辑不属于View,它属于Model。控制逻辑属于控制器。实际上只有一个模板引擎强制执行MVC模式。如果你不希望MVC模式(也许你正在超越它),那么这个引擎仍然可以帮助你不伤害自己,并鼓励你正确地划分你的功能。

真的只有一个好的模板引擎:StringTemplate。有关详情,请参阅http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf。我已经在多种平台(Python,Java,.Net)以及其他许多选项和StringTemplate规则中使用过它。

做出的决定。请享用。最好的祝愿。

5

其他人提到了字符串模板,但我们最近切换到MVEL(它也做了更多,但实际上并没有增加很多重量):http://mvel.codehaus.org/(我发现它更易于使用)。

+0

秒 - MVEL很棒! – bennyl 2014-01-24 11:40:35

0

Freemarker很不错。它重量轻,速度快,具有条件格式和一吨其他功能。

3

恕我直言​​3210是最好的。 jar文件只有180 KB!并支持如果迭代。多么酷啊 !

+1

确实非常酷! – 2014-06-10 14:23:51