我有一个Velocity模板文件,其中包含来自XML的数据。我想将字符串转换为整数类型。
我怎样才能做到这一点?
啊哈!到过那里。
#set($intString = "9")
#set($Integer = 0)
$Integer.parseInt($intString)
这样做会使用 java 底层速度。$Integer 变量只不过是一个 java Integer 对象,您可以使用它来访问 .parseInt
编辑:以上代码用于演示。当然也有优化的方法。
如果您对速度上下文有一些控制,这里有一个替代方案,可以减轻在 Velocity 模板中设置变量的需要。
Context velocityContext = new Context();
velocityContext.put(Integer.class.getSimpleName(), Integer.class);
这允许您调用java.lang.Integer
模板中的静态方法,$Integer.parseInt($value)
而不依赖于在模板中执行类型转换之前调用的#set。
问题parseInt
在于,如果字符串不可解析,它会引发异常。如果您将NumberTool加载到您的上下文中,则比parseInt
以下解决方案更好:
#set($intString = "009")
#set($Integer=$numberTool.toNumber($intString).intValue())
#if($Integer)
## ok
#else
## nok
#end
有时 NumberTool 也加载为$number
.
然而,一个小缺点是,NumberTool 只是解析它找到的第一个数字并忽略其余数字,因此“123a”=> 123。
#set( $stringToCast = "0" )
$number.toNumber($stringToCast)
$number
是NumberTool的默认键名,但可以通过在配置中指定不同的名称来覆盖它(例如$numberTool
)。您必须检查在 Velocity 环境中使用的NumberTool名称。
toNumber 方法返回:
如果无法进行转换,则对象为Number或 null
如果你想明确一个int
变量,而不是一个Number
对象,你可以在结果上使用intValue
方法。所以上面的代码将如下所示:
#set( $stringToCast = "0" )
$number.toNumber($stringToCast).intValue()
当然,您可以将结果分配给另一个变量(例如$intVal
)。
所以完整的代码可以是这样的:
#set( $stringToCast = "0" )
#set( $intVal = $number.toNumber($stringToCast).intValue() )