У меня есть, Stringкоторый представляет целочисленное значение и хотел бы преобразовать его в int. Есть ли отличный вариант Java Integer.parseInt(String)?
почему бы просто не использовать ключевое слово def?
Вездесущий
4
У меня есть строковый параметр, который содержит целое число. Использование def i = string_parameter приводит к исключению приведения класса, если позже я буду использовать i как int.
Стив Куо
Ответы:
492
Используйте toInteger()метод для преобразования Stringв Integer, например,
intvalue="99".toInteger()
Альтернативой, которая избегает использования устаревшего метода (см. Ниже), является
intvalue="66"asInteger
Если вам нужно проверить, Stringможно ли конвертировать перед выполнением конвертации, используйте
String number ="66"if(number.isInteger()){intvalue= number asInteger}
Обновление об устаревании
В последних версиях Groovy один из toInteger()методов устарел. В org.codehaus.groovy.runtime.StringGroovyMethodsGroovy 2.4.4 взято следующее
/**
* Parse a CharSequence into an Integer
*
* @param self a CharSequence
* @return an Integer
* @since 1.8.2
*/publicstaticInteger toInteger(CharSequenceself){returnInteger.valueOf(self.toString().trim());}/**
* @deprecated Use the CharSequence version
* @see #toInteger(CharSequence)
*/@DeprecatedpublicstaticInteger toInteger(Stringself){return toInteger((CharSequence)self);}
Вы можете принудительно вызвать неосуждаемую версию метода, используя что-то ужасное, например:
Caveat emptor: вам нужно isInteger()сначала проверить значение с помощью first, потому что toInteger()будет выдано исключение, если строка не является числовой. То же самое относится к toFloat()/isFloat()
Андрес Киевский
8
В документации API 2.1.6 isInteger / toInteger устарели. Какой сейчас лучший способ сделать это тогда?
Пакман
1
Однако использование Integer paramValue = params.int ('paramName') небезопасно. Если на карте параметров нет param с именем «paramName», вы получите исключение, которое не может привести null к int.
Майкл
2
Просто хотел добавить, что начиная с Groovy 1.8 intэто действительно так int. Groovy по-прежнему будет отображать класс Integer из-за бокса, но вы, например, не сможете назначить nullему int, что было возможно в 1.0. Мы сочли это изменение некритическим, поскольку вы уже не могли использовать null в качестве аргумента для параметра вызова метода типа int. Все это по-прежнему отличается от Java, так как в Java вы не можете преобразовать Integer в Long с помощью простого присваивания или вызвать метод int take с Long.
blackdrag
1
@pakman StringGroovyMethods.isInteger(String)и DefaultGroovyMethods.isInteger(CharSequence)не рекомендуется в пользу StringGroovyMethods.isInteger(CharSequence). То же самое и для toInteger().
Та же проблема, что и выше, это вызовет исключение, если строка не является числом. Проверьте isInteger()сначала.
Андрес Киевский
12
@ank вопрос, заданный для эквивалента, Integer.parseInt(String)который также выдает исключение, если строка не является числом, поэтому, учитывая вопрос, я не считаю это «проблемой»
Dónal
30
В качестве дополнения к ответу Дона , не только заводной добавить .toInteger()метод Stringс, он также добавляет toBigDecimal(), toBigInteger(), toBoolean(), toCharacter(), toDouble(), toFloat(), toList(), и toLong().
В том же духе groovy также добавляет is*эквиваленты всем тем, которые возвращаются, trueесли рассматриваемый Stringвопрос может быть проанализирован в рассматриваемом формате.
Это правильный ответ - сначала проверьте isInteger(), затем сделайте toInteger()... то есть, если вы не хотите добавлять блок try/ catch:), но использование исключений для этого - плохая идея.
Андрес Киевский
2
@anktastic Я бы сказал, что мой ответ является более правильным, потому что вопрос задан для «отличного эквивалента Java Integer.parseInt (String)», то есть для непроверенного преобразования
Dónal
25
Я не уверен, был ли он введен в последних версиях groovy (первоначальный ответ довольно старый), но теперь вы можете использовать:
def num = mystring?.isInteger()? mystring.toInteger():null
или
def num = mystring?.isFloat()? mystring.toFloat():null
Я рекомендую использовать числа с плавающей точкой или даже двойные вместо целых в случае, если указанная строка ненадежна.
+1 лучшее решение IMO, поскольку оно включает проверку на
ноль
Я рекомендую не использовать поплавки или двойные, потому что они по своей сути неточны. Как Groovy делает использование BigDecimals так же просто, как и любого другого числа, если вам нужно больше точности, чем целое число, используйте это. Во-вторых, этот подход кажется безопасным, но результат может быть таким, что num == null, поэтому с этим нужно быть осторожным
Ганс Богадс
Для первого примера кода, я думаю, вы хотели написать mystring.toInteger()вместо mystring.toFloat(). Так def num = mystring?.isInteger() ? mystring.toInteger() : nullбыло бы правильно.
Sk8erPeter
15
Ну, Groovy прекрасно принимает форму Java. Если вы спрашиваете, есть ли способ Groovier , есть способ пойти Integer.
Оба показаны здесь:
String s ="99"assert99==Integer.parseInt(s)Integer i = s asIntegerassert99== i
Способ использования должен все еще быть toInteger (), потому что это действительно не рекомендуется.
intvalue='99'.toInteger()
Версия String устарела, но CharSequence - это интерфейс, который реализует String. Итак, использование String - это нормально, потому что ваш код будет работать, даже если метод будет работать только с CharSequence. То же самое касается isInteger ()
Ответы:
Используйте
toInteger()
метод для преобразованияString
вInteger
, например,Альтернативой, которая избегает использования устаревшего метода (см. Ниже), является
Если вам нужно проверить,
String
можно ли конвертировать перед выполнением конвертации, используйтеОбновление об устаревании
В последних версиях Groovy один из
toInteger()
методов устарел. Вorg.codehaus.groovy.runtime.StringGroovyMethods
Groovy 2.4.4 взято следующееВы можете принудительно вызвать неосуждаемую версию метода, используя что-то ужасное, например:
Лично я очень предпочитаю:
источник
isInteger()
сначала проверить значение с помощью first, потому чтоtoInteger()
будет выдано исключение, если строка не является числовой. То же самое относится кtoFloat()
/isFloat()
int
это действительно такint
. Groovy по-прежнему будет отображать класс Integer из-за бокса, но вы, например, не сможете назначитьnull
емуint
, что было возможно в 1.0. Мы сочли это изменение некритическим, поскольку вы уже не могли использовать null в качестве аргумента для параметра вызова метода типаint
. Все это по-прежнему отличается от Java, так как в Java вы не можете преобразовать Integer в Long с помощью простого присваивания или вызвать метод int take с Long.StringGroovyMethods.isInteger(String)
иDefaultGroovyMethods.isInteger(CharSequence)
не рекомендуется в пользуStringGroovyMethods.isInteger(CharSequence)
. То же самое и дляtoInteger()
.Несколько способов сделать это, этот мой любимый:
источник
isInteger()
сначала.Integer.parseInt(String)
который также выдает исключение, если строка не является числом, поэтому, учитывая вопрос, я не считаю это «проблемой»В качестве дополнения к ответу Дона , не только заводной добавить
.toInteger()
методString
с, он также добавляетtoBigDecimal()
,toBigInteger()
,toBoolean()
,toCharacter()
,toDouble()
,toFloat()
,toList()
, иtoLong()
.В том же духе groovy также добавляет
is*
эквиваленты всем тем, которые возвращаются,true
если рассматриваемыйString
вопрос может быть проанализирован в рассматриваемом формате.Соответствующая страница GDK находится здесь.
источник
isInteger()
, затем сделайтеtoInteger()
... то есть, если вы не хотите добавлять блокtry
/catch
:), но использование исключений для этого - плохая идея.Я не уверен, был ли он введен в последних версиях groovy (первоначальный ответ довольно старый), но теперь вы можете использовать:
или
Я рекомендую использовать числа с плавающей точкой или даже двойные вместо целых в случае, если указанная строка ненадежна.
источник
mystring.toInteger()
вместоmystring.toFloat()
. Такdef num = mystring?.isInteger() ? mystring.toInteger() : null
было бы правильно.Ну, Groovy прекрасно принимает форму Java. Если вы спрашиваете, есть ли способ Groovier , есть способ пойти
Integer
.Оба показаны здесь:
источник
также вы можете сделать статический импорт
и после этого использования
источник
toInteger()
Метод доступен в Groovy, вы можете использовать это.источник
Несколько способов добиться этого. Примеры как ниже
Надеюсь это поможет
источник
Преобразование Groovy Style:
Если у вас есть параметр запроса:
источник
источник
Вот другой способ. если вы не любите исключения.
источник
Способ использования должен все еще быть toInteger (), потому что это действительно не рекомендуется.
Версия String устарела, но CharSequence - это интерфейс, который реализует String. Итак, использование String - это нормально, потому что ваш код будет работать, даже если метод будет работать только с CharSequence. То же самое касается isInteger ()
Смотрите этот вопрос для справки: Как преобразовать строку в CharSequence?
Я прокомментировал, потому что понятие устаревшего на этом методе заставило меня запутаться, и я хочу избежать этого для других людей.
источник
Более простой способ преобразования строки в целое число в Groovy заключается в следующем ...
Теперь «я» содержит целочисленное значение.
источник
toInteger()
метод для конвертации ...