45

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

我怎样才能做到这一点?

4

4 回答 4

98

啊哈!到过那里。

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

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

编辑:以上代码用于演示。当然也有优化的方法。

于 2010-01-28T17:42:01.577 回答
10

如果您对速度上下文有一些控制,这里有一个替代方案,可以减轻在 Velocity 模板中设置变量的需要。

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

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

于 2013-07-11T20:12:05.150 回答
4

问题parseInt在于,如果字符串不可解析,它会引发异常。如果您将NumberTool加载到您的上下文中,则比parseInt以下解决方案更好:

#set($intString = "009")
#set($Integer=$numberTool.toNumber($intString).intValue())

#if($Integer)
 ## ok
#else
 ## nok
#end

有时 NumberTool 也加载为$number.

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

于 2018-03-19T18:02:29.317 回答
0

好,易于:

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

$numberNumberTool的默认键名,但可以通过在配置中指定不同的名称来覆盖它(例如$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() )
于 2019-10-11T09:59:49.553 回答