5

我正在使用 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”或“”,但模板不提供对格式化有很大好处。

有没有办法在格式字符串中包含条件?或者是否有另一个支持条件格式的、最好是轻量级的模板工具?

4

8 回答 8

7

编辑:重写...

如果你不关心设计,那么你可以随意选择一个模板引擎,或者因为你喜欢它的名字,或者其他什么。如果您没有选择引擎的标准,那么谁在乎您选择哪一个?

另一方面,如果您确实关心设计,例如使用模型-视图-控制器 (MVC) 设计模式,那么您的选择很快就会减少。

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

实际上只有一个好的模板引擎: StringTemplate。有关原因的详细信息,请参见http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf

我已经在多个平台(Python、Java、.Net)以及许多替代品和 StringTemplate 规则上使用了它。

决定完成。享受。最好的祝愿。

于 2008-11-20T02:49:36.890 回答
5

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

于 2008-12-16T05:00:11.453 回答
3

恕我直言,块模板引擎是最好的。jar 文件只有180 KB!并支持IF迭代。多么酷啊 !

于 2014-06-06T15:59:40.087 回答
2

jguru 字符串模板

这是用来构建站点 jGuru 的——它已经存在了一段时间。

于 2008-11-06T22:07:55.283 回答
2

不知道您认为它有多轻巧,但Apache Velocity是最著名的 Java 模板引擎之一。

于 2008-11-06T21:53:47.230 回答
1

您可以按照您的方式进行格式化,然后通过将多个'\n's 替换为单个 s 来删除空行'\n',例如

result = result.replaceAll("\n+", "\n");
于 2008-11-06T21:55:38.193 回答
0

使用 Velocity 或Freemarker

于 2008-11-06T21:58:15.943 回答
0

Freemarker 很不错。它轻巧、快速、具有条件格式和大量其他功能。

于 2009-01-08T16:29:19.367 回答