J'ai un String
qui représente une valeur entière et je voudrais le convertir en un int
. Existe-t-il un équivalent groovy de Java Integer.parseInt(String)
?
J'ai un String
qui représente une valeur entière et je voudrais le convertir en un int
. Existe-t-il un équivalent groovy de Java Integer.parseInt(String)
?
Réponses:
Utilisez la toInteger()
méthode pour convertir un String
en un Integer
, par exemple
int value = "99".toInteger()
Une alternative, qui évite d'utiliser une méthode obsolète (voir ci-dessous) est
int value = "66" as Integer
Si vous devez vérifier si le String
peut être converti avant d'effectuer la conversion, utilisez
String number = "66"
if (number.isInteger()) {
int value = number as Integer
}
Dans les versions récentes de Groovy, l'une des toInteger()
méthodes a été déconseillée. Ce qui suit est extrait de 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);
}
Vous pouvez forcer la version non obsolète de la méthode à être appelée en utilisant quelque chose d'horrible comme:
int num = ((CharSequence) "66").toInteger()
Personnellement, je préfère de loin:
int num = 66 as Integer
isInteger()
, car toInteger()
lève une exception si la chaîne n'est pas numérique. La même chose s'applique à toFloat()
/isFloat()
int
est en effet int
. Groovy affichera toujours la classe Integer, à cause de la boxe, mais vous ne pourrez par exemple pas l'attribuer null
à un int
, ce qui était possible dans 1.0. Nous avons considéré que la modification n'était pas critique, car vous ne pouviez déjà pas utiliser null comme argument pour un paramètre d'appel de méthode de typeint
. Tout cela reste différent de Java, car en Java, vous ne pouvez pas convertir Integer en Long par une simple affectation ou appeler une méthode de prise int avec un Long.
StringGroovyMethods.isInteger(String)
et DefaultGroovyMethods.isInteger(CharSequence)
sont déconseillés au profit de StringGroovyMethods.isInteger(CharSequence)
. Il en va de même toInteger()
.
Plusieurs façons de le faire, celle-ci est ma préférée:
def number = '123' as int
isInteger()
abord.
Integer.parseInt(String)
qui lève également une exception si la chaîne n'est pas un nombre, donc étant donné la question, je ne considère pas cela comme un "problème"
Comme un additif à la réponse de Don , non seulement ajouter groovy une .toInteger()
méthode pour String
s, il ajoute également toBigDecimal()
, toBigInteger()
, toBoolean()
, toCharacter()
, toDouble()
, toFloat()
,toList()
et toLong()
.
Dans la même veine, groovy ajoute également des is*
équivalents à tous ceux qui reviennent true
si leString
question en question peut être analysée dans le format en question.
La page GDK correspondante est ici.
isInteger()
, puis faites toInteger()
... c'est-à-dire, sauf si vous préférez ajouter un try
/ catch
bloc :) mais utiliser des exceptions pour cela est une mauvaise idée.
Je ne sais pas s'il a été introduit dans les versions récentes de groovy (la réponse initiale est assez ancienne), mais maintenant vous pouvez utiliser:
def num = mystring?.isInteger() ? mystring.toInteger() : null
ou
def num = mystring?.isFloat() ? mystring.toFloat() : null
Je recommande d'utiliser des flottants ou même des doubles au lieu d'entiers dans le cas si la chaîne fournie n'est pas fiable.
mystring.toInteger()
place de mystring.toFloat()
. Ce def num = mystring?.isInteger() ? mystring.toInteger() : null
serait donc correct.
Eh bien, Groovy accepte très bien le formulaire Java. Si vous demandez s'il existe une méthode Groovier , il existe une solution Integer
.
Les deux sont présentés ici:
String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
vous pouvez également effectuer une importation statique
import static java.lang.Integer.parseInt as asInteger
et après cette utilisation
String s = "99"
asInteger(s)
toInteger()
est disponible en groovy, vous pouvez l'utiliser.
Plusieurs façons d'y parvenir. Les exemples sont comme ci-dessous
a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")
J'espère que cela t'aides
Conversion de style groovy:
Integer num = '589' as Integer
Si vous avez un paramètre de demande:
Integer age = params.int('age')
Voici une autre façon. si vous n'aimez pas les exceptions.
def strnumber = "100"
def intValue = strnumber.isInteger() ? (strnumber as int) : null
La façon d'utiliser devrait toujours être le toInteger (), car il n'est pas vraiment obsolète.
int value = '99'.toInteger()
La version String est obsolète, mais CharSequence est une interface qu'une chaîne implémente. Ainsi, l'utilisation d'une chaîne est correcte, car votre code fonctionnera toujours même lorsque la méthode ne fonctionnera qu'avec CharSequence. Il en va de même pour isInteger ()
Voir cette question pour référence: Comment convertir une chaîne en CharSequence?
J'ai commenté, car la notion de déprécié sur cette méthode m'a embrouillé et je veux éviter cela pour les autres.
La manière la plus simple de convertir une chaîne en entier dans Groovy est la suivante ...
String aa="25"
int i= aa.toInteger()
Maintenant, "i" contient la valeur entière.
toInteger()
méthode pour convertir ...