У мене є, String
що представляє ціле значення, і я хотів би перетворити його в int
. Чи є рівномірний еквівалент Java Integer.parseInt(String)
?
У мене є, String
що представляє ціле значення, і я хотів би перетворити його в int
. Чи є рівномірний еквівалент Java Integer.parseInt(String)
?
Відповіді:
Використовуйте toInteger()
метод для перетворення a String
в Integer
, наприклад
int value = "99".toInteger()
Альтернативою, яка уникає використання застарілого методу (див. Нижче), є
int value = "66" as Integer
Якщо вам потрібно перевірити, чи String
можна конвертувати, перш ніж проводити конверсію, використовуйте
String number = "66"
if (number.isInteger()) {
int value = number as Integer
}
В останніх версіях 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
isInteger()
, тому що toInteger()
викине виняток, якщо рядок не буде числовим. Те саме стосується і toFloat()
/isFloat()
int
є насправді int
. Groovy все одно відображатиме клас Integer через бокс, але ви, наприклад, не зможете призначити null
його int
, що було можливо в 1.0. Ми вважали, що зміна є некритичною, оскільки ви вже не могли використовувати null як аргумент для параметра виклику методу типу int
. Це все ще відрізняється від Java, так як на Java ви не можете перетворити Integer в Long простим завданням або викликати метод взяття int за допомогою Long.
StringGroovyMethods.isInteger(String)
і DefaultGroovyMethods.isInteger(CharSequence)
застаріли на користь StringGroovyMethods.isInteger(CharSequence)
. Те саме стосується toInteger()
.
Кілька способів це зробити, цей мій улюблений:
def number = '123' as int
isInteger()
спочатку.
Integer.parseInt(String)
який також видає Виняток, якщо рядок не є числом, тому, враховуючи це питання, я не вважаю це "проблемою"
В якості доповнення до відповіді Дона , не тільки заводний додати .toInteger()
метод String
с, він також додає toBigDecimal()
, toBigInteger()
, toBoolean()
, toCharacter()
, toDouble()
, toFloat()
, toList()
, і toLong()
.
Таким же чином, groovy також додає is*
еквіваленти до всіх тих, що повертаються, true
якщо String
питання можна проаналізувати у відповідному форматі.
Тут знаходиться відповідна сторінка GDK .
isInteger()
, а потім зробіть toInteger()
... тобто, якщо ви не бажаєте додати try
/ catch
block :), але використовувати винятки для цього - погана ідея.
Я не впевнений, чи був він представлений в останніх версіях groovy (початкова відповідь досить стара), але тепер ви можете використовувати:
def num = mystring?.isInteger() ? mystring.toInteger() : null
або
def num = mystring?.isFloat() ? mystring.toFloat() : null
Я рекомендую використовувати floats або навіть подвійні замість цілих чисел у випадку, якщо наданий рядок недостовірний.
mystring.toInteger()
замість mystring.toFloat()
. Так def num = mystring?.isInteger() ? mystring.toInteger() : null
було б правильно.
Ну, Groovy сприймає форму Java просто чудово. Якщо ви запитуєте, чи є спосіб Groovier , є шлях Integer
.
Тут показано обидва:
String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
також ви можете зробити статичний імпорт
import static java.lang.Integer.parseInt as asInteger
і після цього використання
String s = "99"
asInteger(s)
toInteger()
метод доступний в groovy, ви можете використовувати це.
Кілька способів цього досягти. Приклади наведені нижче
a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")
Сподіваюсь, це допомагає
Перетворення стилю Groovy:
Integer num = '589' as Integer
Якщо у вас є параметр запиту:
Integer age = params.int('age')
Ось інший шлях. якщо вам не подобаються винятки.
def strnumber = "100"
def intValue = strnumber.isInteger() ? (strnumber as int) : null
Способом використання все ж повинен бути toInteger (), оскільки він насправді не є застарілим.
int value = '99'.toInteger()
Версія String застаріла, але CharSequence - це інтерфейс, який використовує String. Отже, використовувати String - це нормально, оскільки ваш код все одно буде працювати, навіть коли метод буде працювати лише з CharSequence. Те саме стосується isInteger ()
Дивіться це запитання для довідки: Як перетворити рядок у CharSequence?
Я прокоментував це, оскільки поняття застарілого цього методу мене збило з пантелику, і я хочу уникати цього для інших людей.
Простіший спосіб перетворення рядка на цілий рядок у Groovy є наступним ...
String aa="25"
int i= aa.toInteger()
Тепер "i" утримує ціле значення.
toInteger()
метод для перетворення ...