How to convert string into integer in the Velocity template?

后端 未结 4 1313
挽巷
挽巷 2020-12-29 01:37

I have a Velocity template file which has the data from XML. I want to convert the string into integer type.

How can I do that?

相关标签:
4条回答
  • 2020-12-29 02:01

    Nice and easy:

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

    $number is the default key name for the NumberTool, but it can be override by specifying a different name in the configuration (for example $numberTool). You have to check what name for NumberTool is used in your Velocity environment.

    toNumber method returns:

    the object as a Number or null if no conversion is possible

    If you want to have explicite an int variable, not a Number object, you can use the intValue method on the result. So the above code will looks like this:

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

    Of course, you can assign the result to another variable (for example $intVal).

    So the full code can look like this:

    #set( $stringToCast = "0" )
    #set( $intVal = $number.toNumber($stringToCast).intValue() )
    
    0 讨论(0)
  • 2020-12-29 02:05

    If you have some control over the velocity context, here's an alternative that alleviates the need to set a variable in the Velocity template.

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

    This allows you to call the static methods of java.lang.Integer in your template using $Integer.parseInt($value) and doesn't rely upon the #set having been called prior to performing the type conversion in the template.

    0 讨论(0)
  • 2020-12-29 02:20

    The problem with parseInt is that it throws an exception in case the string is not parseable. In case you have the NumberTool loaded into your context a better solution than parseInt is the following:

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

    Sometimes the NumberTool is also loaded as $number.

    However, a little drawback is, that the NumberTool simply parses the first number it finds and ignores the rest, so "123a" => 123.

    0 讨论(0)
  • 2020-12-29 02:25

    Aha! Been there.

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

    Doing this uses the java underlying velocity. The $Integer variable is nothing more that a java Integer object which you can then use to access .parseInt

    Edit: The above code is for demonstration. Of course there are ways to optimize it.

    0 讨论(0)
提交回复
热议问题