我有一个速度模板文件,其中包含来自xml的数据。我想将字符串转换为整数类型。
我该怎么做?
答案 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)
$number
是NumberTool的默认键名,但是可以通过在配置中指定其他名称(例如$numberTool
)来覆盖它。您必须检查在Velocity环境中使用的 NumberTool 名称。
该对象为Number;如果无法进行转换,则为null
如果要显式声明int
变量而不是Number
对象,则可以在结果上使用intValue
method。因此,上面的代码将如下所示:
#set( $stringToCast = "0" )
$number.toNumber($stringToCast).intValue()
当然,您可以将结果分配给另一个变量(例如$intVal
)。
因此完整的代码如下所示:
#set( $stringToCast = "0" )
#set( $intVal = $number.toNumber($stringToCast).intValue() )