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

时间:2010-01-28 17:24:40

标签: velocity

我有一个速度模板文件,其中包含来自xml的数据。我想将字符串转换为整数类型。

我该怎么做?

4 个答案:

答案 0 :(得分:79)

啊哈!去过那里。

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

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

编辑:以上代码用于演示。当然,有一些方法可以优化它。

答案 1 :(得分:9)

如果您对速度上下文有一定的控制权,那么这里可以选择减少在Velocity模板中设置变量的需要。

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

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

答案 2 :(得分:0)

parseInt的问题在于,如果字符串不可解析,它会抛出异常。 如果您在上下文中加载NumberTool,则parseInt的解决方案比#set($intString = "009") #set($Integer=$numberTool.toNumber($intString).intValue()) #if($Integer) ## ok #else ## nok #end 更好:

$number

有时,NumberTool也会加载为espeak

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

答案 3 :(得分:0)

又好又简单:

#set( $stringToCast = "0" )
$number.toNumber($stringToCast)

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

toNumber method返回:

  

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

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

#set( $stringToCast = "0" )
$number.toNumber($stringToCast).intValue()

当然,您可以将结果分配给另一个变量(例如$intVal)。

因此完整的代码如下所示:

#set( $stringToCast = "0" )
#set( $intVal = $number.toNumber($stringToCast).intValue() )