Java: Convertir cadenas en enteros

En Java, afortunadamente, ya existen métodos para convertir una cadena en un entero. Te mostramos en nuestro tutorial cómo utilizar esta función y qué tipo de problemas pueden ocurrir.

  • Convertir cadena a entero
  • Conversión desde otra base
  • Posible excepción

Convertir cadena a entero

Java te proporciona una interfaz para convertir tipos de datos de tipo cadena a un integro. La función estática parseInt forma parte de la clase Integer. El método se utiliza de la siguiente manera:

Cadena númeroCadena = "42";
int númeroInt = Integer.parseInt(númeroCadena);

La variable int contiene ahora el valor 42. También puede utilizar el método estático valorDe si desea crear un objeto Integer en lugar de una variable int.

Integer numberInteger = Integer.valueOf(numberString);

Este método tiene el mismo efecto, pero devuelve un objeto Integer.

Conversión desde otra base

Puede ocurrir que quieras convertir una cadena desde un sistema numérico distinto al de diez. Un ejemplo de ello serían los números binarios o hexadecimales. Afortunadamente, esto es posible mediante una ligera modificación del código. Las funciones parseInt y valorDe ofrecen la posibilidad de pasar un segundo parámetro en la llamada a la función que determina la base del número en la cadena.

Cadena numberString = "101"; // 5 en binario
int numberInt = Integer.parseInt(numberString, 2); //Como base especificamos 2

La variable numberInt contiene ahora el valor 5, ya que en la llamada a la función se ha especificado que el número de la numberString es un número binario.

De forma análoga, también podemos crear objetos enteros a partir de una cadena.

Cadena numberString = "A2D8"; // 41688 en hexadecimal
Integer numberInteger = Integer.valueOf(numberString, 16); //Como base especificamos 16

El objeto Integer numberInteger recibe ahora el valor 41688, ya que el numberString es un número hexadecimal, que hemos especificado con el 16 en la llamada a la función.

Posible excepción

Los métodos parseInt y valorDe pueden lanzar ambos una ExcepciónDeFormatoNumérico, si los argumentos no permiten la conversión. Considere el siguiente ejemplo de código:

Cadena numberString = "abc123";

// Lanza una excepción
int numberInt = Integer.parseInt(numberString);

Aquí notará que intentar convertir "abc123" a un número decimal obviamente fallará. En este caso, se lanzará una NumberFormatException. Sin embargo, si se intenta convertir la misma cadena al sistema hexadecimal:

Cadena númeroCadena = "abc123";

// No lanza ninguna excepción porque abc123 hexadecimal se corresponde con 1194684 decimal
int númeroInt = Integer.parseInt(númeroCadena, 16);

Así pues, tiene sentido asegurarse de antemano de si se puede realizar una conversión. Además, por supuesto, también debe utilizar el manejo de excepciones si no puede asegurar que las cadenas están en el formato correcto.