java - 速度:使用分隔符/前缀连接可选字段

标签 java templates velocity prefix separator

在速度模板中用分隔符连接多个字段同时保留空或空字符串而不添加多余分隔符的最简洁/可读的方式是什么?

作为示例,我们有一个工具提示或约会,如下所示:

Appointment ($number) [with $employee] [-] [$remarks] [-] [$roomToVisit]

我使用括号来指示可选数据。填写后通常会显示为

Appointment (3) with John - serve Java coffee - ballroom

当 $remarks 为空但 $roomToVisit 不为空时,则变为:

Appointment (3) with John - ballroom

当 $roomToVisit 为空时,我们得到:

Appointment (3) with John - serve Java coffee

当两者都为空时:

Appointment (3) with John

奖励:还可以使字段前缀可选。当只有 $employee 为空时,我们应该得到:

Appointment (3) serve Java coffee - ballroom

理想情况下,我希望速度模板看起来与第一个代码框非常相似。如果这是不可能的,您将如何使用最少的分散注意力的代码标签来实现这一目标?

类似的想法(速度示例可能有帮助,但更加冗长):

最佳答案

我发现您可以通过将 Java 类注册为上下文中的工具来调用自己的 Java 方法。现有的示例是 DisplayTool 。我使用方法“pre”和可变参数方法“join”创建一个 VelocityStringUtil 类用于条件前缀和连接,并将其注册为:

context.put("text", new VelocityStringUtil());

使用它,以下模板创建预期的输出:

Appointment ($number)$text.pre(' ', $text.join(' - ', $text.pre('with ', $employee), $remarks, $roomToVisit))

正如您所看到的,它仍然有点难看,但我认为它比使用预定义指令更好(除非我遗漏了一些东西)。

关于java - 速度:使用分隔符/前缀连接可选字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19446684/

相关文章:

c++ - 了解 move 语义与模板元编程的好处

wpf - 将 TreeView 的布局更改为看起来像多个 ListBox

javascript - 如何在我自己的自定义字段中使用 JIRA AUI 函数 - velocity edit.vm

java - Enter 之前读取当前控制台输入

java - 如何使用 JNLP 将命令行参数传递给应用程序?

c++ - 模板类继承的子类定义错误

velocity - 当 VelocityContext 中找不到值时,Velocity 可以为变量设置默认值吗?

algorithm - 如何在特定时间内按特定因素改变速度,同时在不同的帧率下保持一致?

java - 解码位图流失败

java - 无法在java中的数据库中保存日历数据