如何在Velocity模板中将字符串转换为整数?

问题描述 投票:37回答:4

我有一个Velocity模板文件,该文件具有来自[[XML的数据。我想将字符串转换为整数类型。

我该怎么做?
velocity
4个回答
81
投票
啊哈!去过那里。

#set($intString = "9") #set($Integer = 0) $Integer.parseInt($intString)

这样做使用Java底层速度。 $ Integer变量不过是一个Java Integer对象,您可以使用该对象访问.parseInt

Edit:上面的代码仅供演示。当然,有一些方法可以对其进行优化。


9
投票
如果您对速度上下文有一定的控制权,那么这是一种替代方法,可以减轻在Velocity模板中设置变量的需要。

Context velocityContext = new Context(); velocityContext.put(Integer.class.getSimpleName(), Integer.class);

[这允许您使用java.lang.Integer调用模板中$Integer.parseInt($value)的静态方法,并且不依赖在模板中执行类型转换之前已调用的#set。

1
投票
parseInt的问题是,如果字符串不可解析,它将引发异常。如果您将NumberTool加载到上下文中,那么以下是比parseInt更好的解决方案:

#set($intString = "009") #set($Integer=$numberTool.toNumber($intString).intValue()) #if($Integer) ## ok #else ## nok #end

有时NumberTool也被加载为$number

但是,一个缺点是NumberTool只是解析它找到的第一个数字,而忽略其余的,所以“ 123a” => 123。


0
投票
简单易用:

#set($stringToCast = "0") $number.toNumber($stringToCast)
$numberNumberTool的默认键名,但是可以通过在配置中指定其他名称(例如$numberTool)来覆盖它。您必须检查在Velocity环境中使用的

NumberTool的名称。toNumber method返回:

该对象为Number;如果无法进行转换,则为null

如果要显式显示int变量而不是Number对象,则可以在结果上使用intValue method。因此,上面的代码将如下所示:

intValue

© www.soinside.com 2019 - 2024. All rights reserved.