web-dev-qa-db-fra.com

Groovy String to int

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?

235
Steve Kuo

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
}

Grails

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.

Mise à jour de la dépréciation

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
419
Dónal

Plusieurs façons de le faire, celui-ci est mon préféré:

def number = '123' as int
61
Esko

En complément de la réponse de Don , Groovy ajoute non seulement une méthode .toInteger() à Strings, 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.

29
Electrons_Ahoy

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.

24
Shmaperator

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
15
Michael Easter

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)
6
Andrey

La méthode toInteger() est disponible dans groovy, vous pouvez l'utiliser.

3
Aakarsh Gupta

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

2
Darth Shekhar
def str = "32"

int num = str as Integer
1
ratzip

Conversion de style groovy:

Integer num = '589' as Integer

Si vous avez un paramètre de requête:

Integer age = params.int('age')
1

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.

0
Math Morn

Voici le un autre moyen. si vous n'aimez pas les exceptions. 

def strnumber = "100"
def intValue = strnumber.isInteger() ?  (strnumber as int) : null
0
Berhanu Tarekegn