【问题标题】:How to convert string into integer in the Velocity template?如何在 Velocity 模板中将字符串转换为整数?
【发布时间】:2019-10-11 18:41:36
【问题描述】:

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

我该怎么做?

【问题讨论】:

  • 您有一个对 XML 输入文档进行操作的 XSLT 文件,并且您想将 xs:string 类型的字段转换为 xs:integer 类型?
  • 是的,我有包含字符串值的 xml 输入文件,我想转换成整数

标签: velocity


【解决方案1】:

啊哈!去过那里。

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

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

编辑:以上代码用于演示。当然有办法优化它。

【讨论】:

  • 非常感谢。我对为什么 $obj.getById("23") 有效而 #set($id = "23") $obj.getById($id)) 无效。
  • 如果我先设置变量 #set($int = $Integer.parseInt($intString) )
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    #set($intString = "009")
    #set($Integer=$numberTool.toNumber($intString).intValue())
    
    #if($Integer)
     ## ok
    #else
     ## nok
    #end
    

    有时 NumberTool 也会加载为 $number

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

    【讨论】:

      【解决方案4】:

      又好又简单:

      #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() )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-23
        • 1970-01-01
        • 2012-06-11
        • 2012-11-22
        • 2015-05-24
        相关资源
        最近更新 更多