J'ai un String
qui représente une valeur entière et voudrais le convertir en un int
. Y at-il un équivalent groovy de Integer.parseInt(String)
de Java?
Utilisez la méthode toInteger()
pour convertir une String
en une Integer
, par ex.
int value = "99".toInteger()
Une alternative évitant d’utiliser une méthode déconseillée (voir ci-dessous) est
int value = "66" as Integer
Si vous devez vérifier si la String
peut être convertie avant d’effectuer la conversion, utilisez
String number = "66"
if (number.isInteger()) {
int value = number as Integer
}
Si vous convertissez un paramètre de requête dans un contrôleur Grails, il existe un moyen encore meilleur
Integer paramValue = params.int('paramName')
L’une des caractéristiques intéressantes de cette technique est qu’elle est sûre, c’est-à-dire que si le paramètre ne peut pas être converti en Integer
, il renvoie la valeur null au lieu de lancer une exception.
Dans les versions récentes de Groovy, l’une des méthodes toInteger()
est devenue obsolète. Ce qui suit est tiré de org.codehaus.groovy.runtime.StringGroovyMethods
dans 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 de terrible comme:
int num = ((CharSequence) "66").toInteger()
Personnellement, je préfère de loin:
int num = 66 as Integer
Plusieurs façons de le faire, celui-ci est mon préféré:
def number = '123' as int
En complément de la réponse de Don , Groovy ajoute non seulement une méthode .toInteger()
à String
s, mais ajoute également toBigDecimal()
, toBigInteger()
, toBoolean()
, toCharacter()
, toDouble()
, toFloat()
, toList()
et toLong()
.
Dans le même esprit, groovy ajoute également is*
équivalents à tous ceux qui renvoient true
si la String
en question peut être analysée dans le format en question.
La page GDK pertinente est ici.
Je ne sais pas s'il a été introduit dans les versions récentes de groovy (la réponse initiale est assez ancienne), mais vous pouvez maintenant utiliser
def num = mystring?.isInteger() ? mystring.toFloat() : null
ou
def num = mystring?.isFloat() ? mystring.toFloat() : null
Je recommande l'utilisation de floats ou même de doubles au lieu d'entiers dans le cas où la chaîne fournie n'est pas fiable.
Groovy accepte très bien la forme Java. Si vous demandez s’il existe une Groovier way, vous pouvez aller à Integer
.
Les deux sont montrés ici:
String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
aussi vous pouvez faire de l'importation statique
import static Java.lang.Integer.parseInt as asInteger
et après cette utilisation
String s = "99"
asInteger(s)
La méthode toInteger()
est disponible dans groovy, vous pouvez l'utiliser.
Plusieurs façons d'y parvenir. Des 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
def str = "32"
int num = str as Integer
Conversion de style groovy:
Integer num = '589' as Integer
Si vous avez un paramètre de requête:
Integer age = params.int('age')
La méthode à utiliser devrait toujours être toInteger (), car elle n’est pas vraiment obsolète.
int value = '99'.toInteger()
La version String est obsolète, mais CharSequence est une interface implémentée par String. Donc, utiliser une chaîne est acceptable, car votre code fonctionnera toujours même lorsque la méthode fonctionnera uniquement 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é, parce que la notion de dépréciée sur cette méthode m'a semé la confusion et que je veux éviter cela pour les autres.
Voici le un autre moyen. si vous n'aimez pas les exceptions.
def strnumber = "100"
def intValue = strnumber.isInteger() ? (strnumber as int) : null