Mam wartość String
reprezentującą liczbę całkowitą i chciałbym ją przekonwertować na wartość int
. Czy istnieje świetny odpowiednik Javy Integer.parseInt(String)
?
Mam wartość String
reprezentującą liczbę całkowitą i chciałbym ją przekonwertować na wartość int
. Czy istnieje świetny odpowiednik Javy Integer.parseInt(String)
?
Odpowiedzi:
Użyj toInteger()
metody, aby przekonwertować a String
na Integer
np
int value = "99".toInteger()
Alternatywą, która pozwala uniknąć stosowania przestarzałej metody (patrz poniżej), jest
int value = "66" as Integer
Jeśli chcesz sprawdzić, czy String
można je przekonwertować przed wykonaniem konwersji, użyj
String number = "66"
if (number.isInteger()) {
int value = number as Integer
}
W najnowszych wersjach Groovy jedna z toInteger()
metod jest przestarzała. Poniższy org.codehaus.groovy.runtime.StringGroovyMethods
fragment pochodzi z 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);
}
Możesz wymusić wywoływanie nieaktualnej wersji metody, używając czegoś okropnego:
int num = ((CharSequence) "66").toInteger()
Osobiście wolę:
int num = 66 as Integer
isInteger()
, ponieważ toInteger()
spowoduje zgłoszenie wyjątku, jeśli ciąg nie jest liczbowy. To samo dotyczy toFloat()
/isFloat()
int
jest rzeczywiście int
. Groovy nadal wyświetla klasę całkowitą z powodu boksu, ale na przykład nie będziesz mógł przypisać null
do int
, co było możliwe w 1.0. Rozważaliśmy zmianę będąc non-krytyczna, ponieważ już nie przydałby null jako argumentu dla parametru metoda połączenia typu int
. Wszystko to wciąż różni się od Javy, ponieważ w Javie nie można przekonwertować liczby całkowitej na Long za pomocą zwykłego przypisania ani wywołać metody przejmowania int z Long.
StringGroovyMethods.isInteger(String)
i DefaultGroovyMethods.isInteger(CharSequence)
są przestarzałe na rzecz StringGroovyMethods.isInteger(CharSequence)
. To samo dotyczy toInteger()
.
Kilka sposobów, aby to zrobić, ten jest moim ulubionym:
def number = '123' as int
isInteger()
najpierw.
Integer.parseInt(String)
generuje również wyjątek, jeśli ciąg nie jest liczbą, więc biorąc pod uwagę pytanie, nie uważam tego za „problem”
Jako dodatek do odpowiedzi Dona , nie tylko porywające dodać .toInteger()
metodę String
s, ale również dodaje toBigDecimal()
, toBigInteger()
, toBoolean()
, toCharacter()
, toDouble()
, toFloat()
, toList()
, i toLong()
.
W tym samym duchu groovy dodaje również is*
ekwiwalenty do wszystkich, które powracają, true
jeśli dane String
pytanie można przeanalizować w odpowiednim formacie.
Odpowiednia strona GDK jest tutaj.
isInteger()
, a potem zrób toInteger()
... to znaczy, chyba że wolisz dodać try
/ catch
block :), ale użycie wyjątków jest złym pomysłem.
Nie jestem pewien, czy został wprowadzony w najnowszych wersjach groovy (początkowa odpowiedź jest dość stara), ale teraz możesz użyć:
def num = mystring?.isInteger() ? mystring.toInteger() : null
lub
def num = mystring?.isFloat() ? mystring.toFloat() : null
Polecam użycie liczb zmiennoprzecinkowych lub nawet podwójnych zamiast liczb całkowitych w przypadku, gdy podany ciąg znaków jest zawodny.
mystring.toInteger()
zamiast tego chciałeś napisać mystring.toFloat()
. Tak def num = mystring?.isInteger() ? mystring.toInteger() : null
byłoby poprawne.
Cóż, Groovy akceptuje formularz Java. Jeśli pytasz, czy istnieje sposób Grooviera , istnieje sposób, aby przejść do Integer
.
Oba są pokazane tutaj:
String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
możesz także wykonać import statyczny
import static java.lang.Integer.parseInt as asInteger
i po tym użyciu
String s = "99"
asInteger(s)
toInteger()
metoda jest dostępna w groovy, możesz jej użyć.
Kilka sposobów na osiągnięcie tego. Przykłady są jak poniżej
a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")
Mam nadzieję że to pomoże
Konwersja stylu Groovy:
Integer num = '589' as Integer
Jeśli masz parametr żądania:
Integer age = params.int('age')
Oto inny sposób. jeśli nie lubisz wyjątków.
def strnumber = "100"
def intValue = strnumber.isInteger() ? (strnumber as int) : null
Sposobem używania powinno być nadal toInteger (), ponieważ tak naprawdę nie jest przestarzałe.
int value = '99'.toInteger()
Wersja String jest przestarzała, ale CharSequence to interfejs, który implementuje String. Tak więc użycie String jest w porządku, ponieważ Twój kod będzie nadal działał, nawet jeśli metoda będzie działać tylko z CharSequence. To samo dotyczy isInteger ()
Zobacz to pytanie w celach informacyjnych: Jak przekonwertować ciąg znaków na CharSequence?
Skomentowałem, ponieważ pojęcie przestarzałej tej metody wprawiło mnie w zakłopotanie i chcę tego uniknąć dla innych ludzi.
Prostszy sposób konwersji ciągu na liczbę całkowitą w Groovy jest następujący ...
String aa="25"
int i= aa.toInteger()
Teraz „i” przechowuje wartość całkowitą.
toInteger()
metody do konwersji ...