Introducción
En este laboratorio (lab), aprenderás cómo comprobar si una cadena (string) se puede convertir en un entero (integer) en Java. Esta es una habilidad fundamental para manejar la entrada del usuario o los datos de fuentes externas.
Explorarás el método Integer.parseInt() para intentar la conversión, aprenderás cómo manejar los posibles errores utilizando NumberFormatException y descubrirás técnicas para validar una cadena antes de intentar analizarla, asegurando un código robusto y libre de errores.
Intenta analizar con Integer.parseInt()
En este paso, exploraremos cómo convertir una String (texto) en un int (número entero) en Java. Esta es una tarea común en la programación, especialmente cuando necesitas obtener una entrada numérica de un usuario o leer números de un archivo.
Java proporciona un método incorporado llamado Integer.parseInt() para este propósito. Veamos cómo funciona.
Primero, asegúrate de estar en el directorio
~/project. Puedes usar el comandocd ~/projecten la Terminal si es necesario.Ahora, creemos un nuevo archivo Java llamado
StringToInt.javaen el directorio~/project. Puedes hacer esto haciendo clic derecho en el Explorador de archivos de la izquierda, seleccionando "Nuevo archivo" y escribiendoStringToInt.java.Abre el archivo
StringToInt.javaen el Editor de código y pega el siguiente código:public class StringToInt { public static void main(String[] args) { String numberString = "123"; int numberInt = Integer.parseInt(numberString); System.out.println("The string is: " + numberString); System.out.println("The integer is: " + numberInt); } }Veamos las partes nuevas:
String numberString = "123";: Declaramos una variableStringllamadanumberStringy le asignamos el valor"123". Observa que"123"está encerrado entre comillas dobles, lo que indica que es una cadena.int numberInt = Integer.parseInt(numberString);: Esta es la parte central de este paso. Llamamos al métodoInteger.parseInt(), pasando nuestranumberStringcomo argumento. Este método intenta convertir la cadena"123"en un entero. El resultado se almacena en una variableintllamadanumberInt.System.out.println("The string is: " + numberString);: Esta línea imprime la cadena original.System.out.println("The integer is: " + numberInt);: Esta línea imprime el entero convertido.
Guarda el archivo (Ctrl+S o Cmd+S).
Ahora, compilemos el programa. Abre la Terminal y ejecuta el siguiente comando:
javac StringToInt.javaSi la compilación es exitosa, no deberías ver ninguna salida, y se creará un archivo
StringToInt.classen el directorio~/project.Finalmente, ejecuta el programa compilado:
java StringToIntDeberías ver la siguiente salida:
The string is: 123 The integer is: 123Como puedes ver, el método
Integer.parseInt()convirtió con éxito la cadena"123"en el entero123.
En el siguiente paso, exploraremos qué sucede cuando la cadena no se puede convertir en un entero.
Capturar NumberFormatException
En el paso anterior, convertimos con éxito una cadena que contiene solo dígitos en un entero utilizando Integer.parseInt(). Pero, ¿qué sucede si la cadena contiene caracteres que no son dígitos? Vamos a averiguarlo.
Cuando Integer.parseInt() intenta convertir una cadena que no es una representación válida de un número, lanza una NumberFormatException. Este es un tipo de error que indica un problema con el formato de la cadena numérica.
Para manejar estos errores de manera elegante, podemos utilizar un bloque try-catch. Un bloque try-catch nos permite "intentar" un fragmento de código que podría causar un error, y si se produce un error, podemos "capturarlo" y manejarlo de una manera específica, evitando que nuestro programa se bloquee.
Modifiquemos nuestro programa StringToInt.java para demostrar esto.
Abre el archivo
StringToInt.javaen el editor WebIDE.Modifica el código para incluir un bloque
try-catchy cambia la cadena de entrada:public class StringToInt { public static void main(String[] args) { String numberString = "abc"; // This string cannot be parsed as an integer try { int numberInt = Integer.parseInt(numberString); System.out.println("The string is: " + numberString); System.out.println("The integer is: " + numberInt); } catch (NumberFormatException e) { System.out.println("Error: Could not convert the string to an integer."); System.out.println("Details: " + e.getMessage()); } } }Esto es lo que hemos agregado:
String numberString = "abc";: Cambiamos la cadena a"abc", que claramente no es un entero válido.try { ... }: El código dentro del bloquetryes lo que queremos intentar. En este caso, es la llamada aInteger.parseInt().catch (NumberFormatException e) { ... }: Si se produce unaNumberFormatExceptiondentro del bloquetry, se ejecutará el código dentro del bloquecatch.System.out.println("Error: Could not convert the string to an integer.");: Esta línea imprime un mensaje de error amigable para el usuario.System.out.println("Details: " + e.getMessage());: Esta línea imprime más detalles sobre la excepción, lo que puede ser útil para la depuración.
Guarda el archivo (Ctrl+S o Cmd+S).
Compila el programa modificado en la Terminal:
javac StringToInt.javaEjecuta el programa compilado:
java StringToIntEsta vez, dado que
"abc"no se puede analizar como un entero, se capturará laNumberFormatExceptiony deberías ver una salida similar a esta:Error: Could not convert the string to an integer. Details: For input string: "abc"En lugar de que el programa se bloquee, el bloque
catchmanejó el error e imprimió un mensaje útil. ¡Esta es una experiencia de usuario mucho mejor!
Utilizar bloques try-catch es crucial para escribir programas robustos que puedan manejar entradas o situaciones inesperadas.
Validar la cadena antes de analizarla
En el paso anterior, aprendimos cómo capturar una NumberFormatException cuando Integer.parseInt() falla. Si bien capturar excepciones es importante para manejar errores, a menudo es mejor prevenir que el error ocurra en primer lugar.
En este paso, aprenderemos cómo validar una cadena antes de intentar analizarla como un entero. Esto implica verificar si la cadena contiene solo dígitos.
Una forma de hacer esto es iterar a través de cada carácter de la cadena y verificar si es un dígito. Otro enfoque común es usar expresiones regulares, pero para los principiantes, un simple bucle es más fácil de entender.
Modifiquemos nuevamente nuestro programa StringToInt.java para incluir una comprobación de validación.
Abre el archivo
StringToInt.javaen el editor WebIDE.Reemplaza el código existente con el siguiente:
public class StringToInt { public static void main(String[] args) { String numberString = "123a"; // This string contains a non-digit character if (isValidInteger(numberString)) { int numberInt = Integer.parseInt(numberString); System.out.println("The string is: " + numberString); System.out.println("The integer is: " + numberInt); } else { System.out.println("Error: The string '" + numberString + "' is not a valid integer."); } } // Method to check if a string is a valid integer public static boolean isValidInteger(String str) { if (str == null || str.isEmpty()) { return false; // An empty or null string is not a valid integer } for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (i == 0 && (c == '-' || c == '+')) { // Allow a leading sign (+ or -) continue; } if (!Character.isDigit(c)) { return false; // Found a non-digit character } } return true; // All characters are digits (or a leading sign) } }Veamos los cambios:
- Agregamos un nuevo método llamado
isValidInteger(String str). Este método toma una cadena como entrada y devuelvetruesi la cadena representa un entero válido, yfalseen caso contrario. - Dentro de
isValidInteger, primero verificamos si la cadena es nula o está vacía. - Luego recorremos cada carácter de la cadena.
Character.isDigit(c)es un método incorporado de Java que verifica si un carácter es un dígito.- Agregamos una comprobación para permitir un signo más o menos al principio.
- En el método
main, ahora usamos una declaraciónif-else. Llamamos aisValidInteger()para verificar la cadena antes de intentar analizarla. - Si
isValidInteger()devuelvetrue, procedemos conInteger.parseInt(). - Si devuelve
false, imprimimos un mensaje de error sin intentar analizar, evitando así laNumberFormatException.
- Agregamos un nuevo método llamado
Guarda el archivo (Ctrl+S o Cmd+S).
Compila el programa modificado en la Terminal:
javac StringToInt.javaEjecuta el programa compilado:
java StringToIntDado que la cadena
"123a"contiene un carácter que no es un dígito, el métodoisValidIntegerdevolveráfalse, y deberías ver la siguiente salida:Error: The string '123a' is not a valid integer.Ahora, cambiemos la cadena a un entero válido para ver la otra rama de la declaración
if-else.Cambia la variable
numberStringa"456"en el archivoStringToInt.java:String numberString = "456";Guarda el archivo.
Compila y ejecuta el programa nuevamente:
javac StringToInt.java java StringToIntEsta vez,
isValidIntegerdevolverátrue, y deberías ver:The string is: 456 The integer is: 456
Al validar la cadena antes de analizarla, podemos manejar la entrada no válida de manera más elegante y evitar errores en tiempo de ejecución como la NumberFormatException. Esta es una buena práctica para escribir código más robusto y confiable.
Resumen
En este laboratorio (lab), aprendimos cómo convertir una String en un int en Java utilizando el método Integer.parseInt(). Creamos un archivo Java, escribimos código para demostrar la conversión y compilamos el programa. Este método es esencial para manejar la entrada numérica de diversas fuentes.



