Groovy String to int

У меня есть String, который представляет целочисленное значение и хотел бы преобразовать его в int. Существует ли groovy эквивалент Java Integer.parseInt(String)?

Ответ 1

Используйте метод toInteger() для преобразования String в Integer, например

int value = "99".toInteger()

Альтернативой, которая позволяет избежать использования устаревшего метода (см. ниже), является

int value = "66" as Integer

Если вам нужно проверить, можно ли преобразовать String перед выполнением преобразования, используйте

String number = "66"

if (number.isInteger()) {
  int value = number as Integer
}

Grails

Если вы конвертируете параметр запроса в контроллер Grails, есть еще лучший способ

Integer paramValue = params.int('paramName')

Одна из приятных особенностей этого метода заключается в том, что он безопасен, то есть если параметр не может быть преобразован в Integer, он возвращает null, а не бросает исключение.

Обновление устаревших

В последних версиях Groovy один из методов toInteger() устарел. Из org.codehaus.groovy.runtime.StringGroovyMethods в Groovy 2.4.4

взято следующее:
/**
 * Parse a CharSequence into an Integer
 *
 * @param self a CharSequence
 * @return an Integer
 * @since 1.8.2
 */
public static Integer toInteger(CharSequence self) {
    return Integer.valueOf(self.toString().trim());
}

/**
 * @deprecated Use the CharSequence version
 * @see #toInteger(CharSequence)
 */
@Deprecated
public static Integer toInteger(String self) {
    return toInteger((CharSequence) self);
}

Вы можете заставить не устаревшую версию метода вызываться с помощью чего-то ужасного, например:

int num = ((CharSequence) "66").toInteger()

Лично я предпочитаю:

int num = 66 as Integer

Ответ 2

Несколько способов сделать это, этот мой любимый:

def number = '123' as int

Ответ 3

В качестве дополнения к Don answer не только groovy добавляет метод .toInteger() к String s, он также добавляет toBigDecimal(), toBigInteger(), toBoolean(), toCharacter(), toDouble(), toFloat(), toList() и toLong().

В том же ключе groovy также добавляет is* эквиваленты ко всем тем, которые возвращают true, если рассматриваемый String может быть проанализирован в соответствующем формате.

Соответствующая страница GDK находится здесь.

Ответ 4

Я не уверен, что он был представлен в последних версиях groovy (исходный ответ довольно старый), но теперь вы можете использовать:

def num = mystring?.isInteger()?mystring.toFloat():null

или

def num = mystring?.isFloat()?mystring.toFloat():null

Я рекомендую использовать поплавки или даже удваивать вместо целых чисел в случае, если предоставленная строка ненадежна.

Ответ 5

Ну, Groovy отлично принимает форму Java. Если вы спрашиваете, есть ли способ Groovier, есть способ перейти к Integer.

Оба показаны здесь:

String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i

Ответ 6

также вы можете сделать статический импорт

import static java.lang.Integer.parseInt as asInteger

и после этого используйте

String s = "99"
asInteger(s)

Ответ 7

toInteger() доступен в groovy, вы можете использовать это.

Ответ 8

Groovy Преобразование стиля:

Integer num = '589' as Integer

Если у вас есть параметр запроса:

Integer age = params.int('age')

Ответ 9

Несколько способов добиться этого. Примеры ниже

a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")

Надеюсь, что это поможет