groovy - traduccion - Cadena maravillosa para int
groovy traduccion (13)
Aquí está la otra manera. Si no te gustan las excepciones.
def strnumber = "100"
def intValue = strnumber.isInteger() ? (strnumber as int) : null
Tengo una String
que representa un valor entero y me gustaría convertirla en un int
. ¿Hay un equivalente maravilloso de Integer.parseInt(String)
de Java?
Bueno, Groovy acepta el formulario Java muy bien. Si está preguntando si hay una forma Groovier , hay una manera de ir a Integer
.
Ambos se muestran aquí:
String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
Como una adición a la respuesta de Don , Groovy no solo agrega un método .toInteger()
a String
s, sino que también agrega a toBigDecimal()
, toBigInteger()
, toBoolean()
, toCharacter()
, toDouble()
, toFloat()
, toList()
, y toLong()
.
En la misma línea, groovy también agrega is*
equivalentes a todos aquellos que devuelven true
si la String
en cuestión se puede analizar en el formato en cuestión.
La página GDK relevante está aquí.
Conversión de Groovy Style:
Integer num = ''589'' as Integer
Si tiene parámetro de solicitud:
Integer age = params.int(''age'')
La forma de usar aún debe ser toInteger (), porque 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. Por lo tanto, usar una cadena está bien, porque su código seguirá funcionando incluso cuando el método solo funcionará con CharSequence. Lo mismo ocurre con isInteger ()
Vea esta pregunta para referencia: ¿Cómo convertir una cadena a CharSequence?
Comenté, porque la noción de desaprobado en este método me confundió y quiero evitarlo para otras personas.
La forma más sencilla de convertir una cadena en entero en Groovy es como sigue ...
String aa="25"
int i= aa.toInteger()
Ahora "i" contiene el valor entero.
No estoy seguro de si se introdujo en versiones recientes de groovy (la respuesta inicial es bastante antigua), pero ahora puedes usar:
def num = mystring?.isInteger() ? mystring.toFloat() : 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.
También puedes hacer importación estática.
import static java.lang.Integer.parseInt as asInteger
y despues de este uso
String s = "99"
asInteger(s)
Utilice el método toInteger()
para convertir una String
en un Integer
, por ejemplo
int value = "99".toInteger()
Una alternativa, que evita el uso de un método en desuso (ver más abajo) es
int value = "66" as Integer
Si necesita verificar si la String
se puede convertir antes de realizar la conversión, use
String number = "66"
if (number.isInteger()) {
int value = number as Integer
}
Griales
Si estás convirtiendo un parámetro de solicitud en un controlador Grails, hay una manera aún mejor
Integer paramValue = params.int(''paramName'')
Una de las características interesantes de esta técnica es que es segura, es decir, si el parámetro no se puede convertir a un Integer
, devuelve un valor nulo en lugar de lanzar una excepción.
Actualización de la Depredación
En versiones recientes de Groovy, uno de los métodos toInteger()
ha quedado en desuso. Lo siguiente se toma de org.codehaus.groovy.runtime.StringGroovyMethods
en 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 que se llame a la versión no desaprobada del método usando algo horrible como:
int num = ((CharSequence) "66").toInteger()
Personalmente, prefiero mucho más:
int num = 66 as Integer
Varias formas de hacerlo, esta es mi favorita:
def number = ''123'' as int
Varias maneras 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
toInteger()
método toInteger()
está disponible en groovy, puedes usarlo.
def str = "32"
int num = str as Integer