¿Cómo convierto una cadena en un int en Java?
¿ Cómo puedo convertir un String
valor a un int
tipo?
"1234" → 1234
String myString = "1234";
int foo = Integer.parseInt(myString);
Si observa la documentación de Java , notará que el "truco" es que esta función puede generar un archivo NumberFormatException
, que puede manejar:
int foo;
try {
foo = Integer.parseInt(myString);
}
catch (NumberFormatException e) {
foo = 0;
}
(Este tratamiento establece de forma predeterminada un número con formato incorrecto 0
, pero puedes hacer otra cosa si lo deseas).
Alternativamente, puedes usar un Ints
método de la biblioteca Guava, que en combinación con Java 8 Optional
, crea una manera poderosa y concisa de convertir una cadena en un int:
import com.google.common.primitives.Ints;
int foo = Optional.ofNullable(myString)
.map(Ints::tryParse)
.orElse(0)
Por ejemplo, aquí hay dos formas:
Integer x = Integer.valueOf(str);
// or
int y = Integer.parseInt(str);
Hay una ligera diferencia entre estos métodos:
valueOf
devuelve una instancia nueva o en caché dejava.lang.Integer
parseInt
devuelve primitivoint
.
Lo mismo es para todos los casos: Short.valueOf
/ parseShort
, Long.valueOf
/ parseLong
, etc.
Bueno, un punto muy importante a considerar es que el analizador de enteros arroja NumberFormatException como se indica en Javadoc .
int foo;
String StringThatCouldBeANumberOrNot = "26263Hello"; //will throw exception
String StringThatCouldBeANumberOrNot2 = "26263"; //will not throw exception
try {
foo = Integer.parseInt(StringThatCouldBeANumberOrNot);
} catch (NumberFormatException e) {
//Will Throw exception!
//do something! anything to handle the exception.
}
try {
foo = Integer.parseInt(StringThatCouldBeANumberOrNot2);
} catch (NumberFormatException e) {
//No problem this time, but still it is good practice to care about exceptions.
//Never trust user input :)
//Do something! Anything to handle the exception.
}
Es importante manejar esta excepción cuando se intenta obtener valores enteros a partir de argumentos divididos o al analizar algo dinámicamente.
Hazlo manualmente:
public static int strToInt(String str) {
int i = 0;
int num = 0;
boolean isNeg = false;
// Check for negative sign; if it's there, set the isNeg flag
if (str.charAt(0) == '-') {
isNeg = true;
i = 1;
}
// Process each character of the string;
while (i < str.length()) {
num *= 10;
num += str.charAt(i++) - '0'; // Minus the ASCII code of '0' to get the value of the charAt(i++).
}
if (isNeg)
num = -num;
return num;
}