Tengo un String
que representa un valor entero y me gustaría convertirlo en un int
. ¿Hay un equivalente maravilloso de Java Integer.parseInt(String)
?
Tengo un String
que representa un valor entero y me gustaría convertirlo en un int
. ¿Hay un equivalente maravilloso de Java Integer.parseInt(String)
?
Respuestas:
Use el toInteger()
método para convertir un String
a un Integer
, por ejemplo
int value = "99".toInteger()
Una alternativa, que evita el uso de un método obsoleto (ver más abajo) es
int value = "66" as Integer
Si necesita verificar si String
se puede convertir antes de realizar la conversión, use
String number = "66"
if (number.isInteger()) {
int value = number as Integer
}
En versiones recientes de Groovy, uno de los toInteger()
métodos ha quedado en desuso. Lo siguiente está tomado 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);
}
Puede forzar la invocación de la versión no obsoleta del método usando algo horrible como:
int num = ((CharSequence) "66").toInteger()
Personalmente, prefiero mucho:
int num = 66 as Integer
isInteger()
primero debe verificar el valor , ya toInteger()
que arrojará una excepción si la cadena no es numérica. Lo mismo se aplica a toFloat()
/isFloat()
int
es de hecho int
. Groovy seguirá mostrando la clase Integer, debido al boxeo, pero, por ejemplo, no podrá asignar null
a un int
, lo que fue posible en 1.0. Consideramos que el cambio no es crítico, ya que no puede usar nulo como argumento para un parámetro de tipo de llamada a método int
. Todo esto sigue siendo diferente de Java, ya que en Java no puede convertir Integer a Long mediante una simple asignación o llamar a un método de toma int con un Long.
StringGroovyMethods.isInteger(String)
y DefaultGroovyMethods.isInteger(CharSequence)
están en desuso a favor de StringGroovyMethods.isInteger(CharSequence)
. Lo mismo vale para toInteger()
.
Varias formas de hacerlo, este es mi favorito:
def number = '123' as int
isInteger()
primero.
Integer.parseInt(String)
cual también arroja una Excepción si la cadena no es un número, por lo que dada la pregunta, no considero que sea un "problema"
Como una adición a la respuesta de Don , no sólo añadir maravilloso un .toInteger()
método para String
s, sino que también añade toBigDecimal()
, toBigInteger()
, toBoolean()
, toCharacter()
, toDouble()
, toFloat()
,toList()
, y toLong()
.
En la misma línea, groovy también agrega is*
equivalentes a todos aquellos que regresan true
si elString
en cuestión se puede analizar en el formato en cuestión.
La página relevante de GDK está aquí.
isInteger()
, luego haga toInteger()
... eso es, a menos que prefiera agregar un try
/ catch
bloque :) pero usar excepciones para esto es una mala idea.
No estoy seguro de si se introdujo en versiones recientes de groovy (la respuesta inicial es bastante antigua), pero ahora puede usar:
def num = mystring?.isInteger() ? mystring.toInteger() : null
o
def num = mystring?.isFloat() ? mystring.toFloat() : null
Recomiendo usar flotantes o incluso dobles en lugar de enteros en el caso si la cadena proporcionada no es confiable.
mystring.toInteger()
lugar de mystring.toFloat()
. Entonces def num = mystring?.isInteger() ? mystring.toInteger() : null
sería correcto.
Bueno, Groovy acepta bien la forma Java. Si está preguntando si hay una forma de Groovier , hay una forma de hacerlo Integer
.
Ambos se muestran aquí:
String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
también puedes hacer importación estática
import static java.lang.Integer.parseInt as asInteger
y después de este uso
String s = "99"
asInteger(s)
toInteger()
El método está disponible en groovy, puedes usar eso.
Varias formas de lograr esto. Los ejemplos son los siguientes
a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")
Espero que esto ayude
Conversión de estilo maravilloso:
Integer num = '589' as Integer
Si tiene parámetro de solicitud:
Integer age = params.int('age')
Aquí está el otro camino. Si no te gustan las excepciones.
def strnumber = "100"
def intValue = strnumber.isInteger() ? (strnumber as int) : null
La forma de usar aún debe ser toInteger (), porque en realidad no está en desuso.
int value = '99'.toInteger()
La versión de String está en desuso, pero CharSequence es una interfaz que implementa un String. Entonces, usar una cadena está bien, porque su código seguirá funcionando incluso cuando el método solo funcione con CharSequence. Lo mismo ocurre con isInteger ()
Consulte esta pregunta como referencia: ¿Cómo convertir una Cadena a CharSequence?
Comenté, porque la noción de obsoleto en este método me confundió y quiero evitar eso para otras personas.
La manera más simple de convertir una cadena a entero en Groovy es la siguiente ...
String aa="25"
int i= aa.toInteger()
Ahora "i" tiene el valor entero.
toInteger()
método para conversar ...