J'ai un Stringqui 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)?
pourquoi ne pas simplement utiliser le mot clé def?
Omniprésent
4
J'ai un paramètre de chaîne qui contient un entier. L'utilisation de def i = string_parameter entraîne une exception de conversion de classe si j'utilise plus tard i en tant qu'int.
Steve Kuo
Réponses:
492
Utilisez la toInteger()méthode pour convertir un Stringen un Integer, par exemple
intvalue="99".toInteger()
Une alternative, qui évite d'utiliser une méthode obsolète (voir ci-dessous) est
intvalue="66"asInteger
Si vous devez vérifier si le Stringpeut être converti avant d'effectuer la conversion, utilisez
String number ="66"if(number.isInteger()){intvalue= number asInteger}
Mise à jour sur la dépréciation
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.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);}
Vous pouvez forcer la version non obsolète de la méthode à être appelée en utilisant quelque chose d'horrible comme:
Caveat emptor: vous devez d'abord vérifier la valeur isInteger(), car toInteger()lève une exception si la chaîne n'est pas numérique. La même chose s'applique à toFloat()/isFloat()
Andres Kievsky
8
Dans la documentation de l'api 2.1.6 isInteger / toInteger sont dépréciés. Quelle est alors la meilleure façon de procéder?
pakman
1
Utiliser Integer paramValue = params.int ('paramName') n'est cependant pas sûr. S'il n'y a pas de paramètre avec le nom "paramName" dans la carte des paramètres, vous obtenez une exception sur ne peut pas convertir null en int.
Michael
2
je voulais juste ajouter, que depuis Groovy 1.8 intest 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.
blackdrag
1
@pakman StringGroovyMethods.isInteger(String)et DefaultGroovyMethods.isInteger(CharSequence)sont déconseillés au profit de StringGroovyMethods.isInteger(CharSequence). Il en va de même toInteger().
bmaupin
67
Plusieurs façons de le faire, celle-ci est ma préférée:
Même problème que ci-dessus, cela lèvera une exception si la chaîne n'est pas un nombre. Vérifiez d' isInteger()abord.
Andres Kievsky
12
@ank la question demandée pour un équivalent 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"
Dónal
30
Comme un additif à la réponse de Don , non seulement ajouter groovy une .toInteger()méthode pour Strings, 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 truesi leString question en question peut être analysée dans le format en question.
C'est la bonne réponse - vérifiez d'abord avec isInteger(), puis faites toInteger()... c'est-à-dire, sauf si vous préférez ajouter un try/ catchbloc :) mais utiliser des exceptions pour cela est une mauvaise idée.
Andres Kievsky
2
@anktastic Je dirais que ma réponse est plus correcte car la question demandait "un équivalent groovy de Java Integer.parseInt (String)", c'est-à-dire une conversion non contrôlée
Dónal
25
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.
+1 meilleure solution IMO car elle inclut la vérification nulle en plus de la vérification de type avant la conversion
kaskelotti
Je déconseille d'utiliser des flotteurs ou des doubles car ils sont intrinsèquement inexacts. Comme Groovy rend l'utilisation de BigDecimals aussi simple que n'importe quel autre numéro, si vous avez besoin de plus de précision qu'un nombre entier, utilisez-le. Deuxièmement, cette approche semble sûre, mais le résultat peut être que num == null, vous devez donc être prudent avec cela
Hans Bogaards
Pour le premier exemple de code, je suppose que vous vouliez écrire à la mystring.toInteger()place de mystring.toFloat(). Ce def num = mystring?.isInteger() ? mystring.toInteger() : nullserait donc correct.
Sk8erPeter
15
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"assert99==Integer.parseInt(s)Integer i = s asIntegerassert99== i
La façon d'utiliser devrait toujours être le toInteger (), car il n'est pas vraiment obsolète.
intvalue='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 ()
Qu'est-ce que cela ajoute aux réponses existantes? La réponse acceptée publiée il y a 9 ans commence par: "Utilisez la toInteger()méthode pour convertir ...
Réponses:
Utilisez la
toInteger()
méthode pour convertir unString
en unInteger
, par exempleUne alternative, qui évite d'utiliser une méthode obsolète (voir ci-dessous) est
Si vous devez vérifier si le
String
peut être converti avant d'effectuer la conversion, utilisezMise à jour sur la dépréciation
Dans les versions récentes de Groovy, l'une des
toInteger()
méthodes a été déconseillée. Ce qui suit est extrait deorg.codehaus.groovy.runtime.StringGroovyMethods
Groovy 2.4.4Vous pouvez forcer la version non obsolète de la méthode à être appelée en utilisant quelque chose d'horrible comme:
Personnellement, je préfère de loin:
la source
isInteger()
, cartoInteger()
lève une exception si la chaîne n'est pas numérique. La même chose s'applique àtoFloat()
/isFloat()
int
est en effetint
. Groovy affichera toujours la classe Integer, à cause de la boxe, mais vous ne pourrez par exemple pas l'attribuernull
à unint
, 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)
etDefaultGroovyMethods.isInteger(CharSequence)
sont déconseillés au profit deStringGroovyMethods.isInteger(CharSequence)
. Il en va de mêmetoInteger()
.Plusieurs façons de le faire, celle-ci est ma préférée:
la source
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 pourString
s, il ajoute égalementtoBigDecimal()
,toBigInteger()
,toBoolean()
,toCharacter()
,toDouble()
,toFloat()
,toList()
ettoLong()
.Dans la même veine, groovy ajoute également des
is*
équivalents à tous ceux qui reviennenttrue
si leString
question en question peut être analysée dans le format en question.La page GDK correspondante est ici.
la source
isInteger()
, puis faitestoInteger()
... c'est-à-dire, sauf si vous préférez ajouter untry
/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:
ou
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.
la source
mystring.toInteger()
place demystring.toFloat()
. Cedef 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:
la source
vous pouvez également effectuer une importation statique
et après cette utilisation
la source
toInteger()
est disponible en groovy, vous pouvez l'utiliser.la source
Plusieurs façons d'y parvenir. Les exemples sont comme ci-dessous
J'espère que cela t'aides
la source
Conversion de style groovy:
Si vous avez un paramètre de demande:
la source
la source
Voici une autre façon. si vous n'aimez pas les exceptions.
la source
La façon d'utiliser devrait toujours être le toInteger (), car il n'est pas vraiment obsolète.
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 source
La manière la plus simple de convertir une chaîne en entier dans Groovy est la suivante ...
Maintenant, "i" contient la valeur entière.
la source
toInteger()
méthode pour convertir ...