我有一个Velocity模板文件,其中包含来自XML的数据。 我想将字符串转换为整数类型。
我该如何做到这一点?
我有一个Velocity模板文件,其中包含来自XML的数据。 我想将字符串转换为整数类型。
我该如何做到这一点?
啊哈!我也经历过类似的情况。
#set($intString = "9")
#set($Integer = 0)
$Integer.parseInt($intString)
这样做使用了Java底层的Velocity。$Integer变量不过是一个Java Integer对象,您可以使用它来访问.parseInt方法。
编辑:以上代码仅供演示。当然有优化它的方法。
$obj.getById("23")
能够正常工作,而#set($id = "23") $obj.getById($id))
不能正常工作而苦恼。 - adarshr如果您可以控制速度上下文,这里有一种替代方法,可以减轻在Velocity模板中设置变量的需要。
Context velocityContext = new Context();
velocityContext.put(Integer.class.getSimpleName(), Integer.class);
这样可以让您在模板中使用$Integer.parseInt($value)
调用java.lang.Integer
的静态方法,并且不依赖于在模板中执行类型转换之前已经调用了#set。
parseInt
存在一个问题,即如果字符串无法解析,则会抛出异常。如果您的上下文中加载了 NumberTool,则比使用 parseInt
更好的解决方案如下:
#set($intString = "009")
#set($Integer=$numberTool.toNumber($intString).intValue())
#if($Integer)
## ok
#else
## nok
#end
$number
。Integer.parseInt
可能更合适。因人而异! - undefined#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() )