У меня есть файл шаблона Velocity, который содержит данные из XML. Я хочу преобразовать строку в целочисленный тип.
Как я могу это сделать?
У меня есть файл шаблона 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
). Вы должны проверить, какое имя для NumberTool используется в вашей среде Velocity.
Метод toNumber возвращает:
объект в виде числа или нуля, если преобразование невозможно
Если вы хотите получить явную переменную int
, а не объект Number
, вы можете использовать метод intValue
для результата. Поэтому приведенный выше код будет выглядеть следующим образом:
#set( $stringToCast = "0" )
$number.toNumber($stringToCast).intValue()
Конечно, вы можете присвоить результат другой переменной (например, $intVal
).
Таким образом, полный код может выглядеть следующим образом:
#set( $stringToCast = "0" )
#set( $intVal = $number.toNumber($stringToCast).intValue() )