Подтвердить что ты не робот

Как преобразовать строку в целое число в шаблоне Velocity?

У меня есть файл шаблона Velocity, который содержит данные из XML. Я хочу преобразовать строку в целочисленный тип.

Как я могу это сделать?

4b9b3361

Ответ 1

Ага! Был там.

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

В этом случае используется базовая скорость java. Переменная $Integer не более чем объект Java Integer, который вы затем можете использовать для доступа .parseInt

Изменить: Вышеприведенный код предназначен для демонстрации. Конечно, есть способы его оптимизировать.

Ответ 2

Если у вас есть некоторый контроль над контекстом скорости, вот альтернатива, которая облегчает необходимость установки переменной в шаблоне Velocity.

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

Это позволяет вам вызывать статические методы java.lang.Integer в вашем шаблоне с помощью $Integer.parseInt($value) и не полагается на #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)

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