Java convertir cadena a entero

Convertir un String en un int, o su respectivo contenedor de clase Integer, es una operación común y simple. Lo mismo ocurre al revés, convertir un...

Introducción

Convertir un String en un int, o su respectiva clase contenedora Integer, es una operación común y simple. Lo mismo ocurre al revés, convertir un entero a cadena.

Hay varias formas de lograr esta conversión simple utilizando métodos integrados en el JDK.

Conversión de cadena a entero

Para convertir String a Integer o int, existen cuatro enfoques integrados. La clase contenedora Integer proporciona algunos métodos específicamente para este uso: parseInt(), valueOf() y decode(), aunque también podemos usar su constructor y pasarle un String.

Estos tres métodos tienen diferentes tipos de devolución:

  • parseInt()- devuelve int primitivo.
  • valueOf() - devuelve una instancia nueva o almacenada en caché de Integer
  • decode() - devuelve una instancia nueva o en caché de Integer

Dicho esto, es válido plantear una pregunta:

"¿Cuál es la diferencia entre valueOf() y decode() entonces?

La diferencia es que decode() también acepta otras representaciones numéricas, además del decimal regular: dígitos hexadecimales, dígitos octales, etc.

Nota: Es mejor práctica instanciar un Integer con la ayuda del método valueOf() en lugar de confiar en el constructor. Esto se debe a que el método valueOf() devolverá una copia en caché para cualquier valor entre -128 y 127 inclusive, y al hacerlo reducirá la huella de memoria.

Integer.parseInt()

El método parseInt() se envía en dos versiones:

  • parseInt(String s) - Aceptar la cadena que nos gustaría analizar
  • parseInt(String s, int radix) - Aceptando el String así como la base del sistema de numeración

El método parseInt() convierte la cadena de entrada en un int primitivo y lanza una NumberFormatException si la cadena no se puede convertir:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
String string1 = "100";
String string2 = "100";
String string3 = "Google";
String string4 = "20";

int number1 = Integer.parseInt(string1);
int number2 = Integer.parseInt(string2, 16); 
int number3 = Integer.parseInt(string3, 32); 
int number4 = Integer.parseInt(string4, 8); 

System.out.println("Parsing String \"" + string1 + "\": " + number1);
System.out.println("Parsing String \"" + string2 + "\" in base 16: " + number2);
System.out.println("Parsing String \"" + string3 + "\" in base 32: " + number3);
System.out.println("Parsing String \"" + string4 + "\" in base 8: " + number4);

Ejecutar este fragmento de código producirá:

1
2
3
4
Parsing String "100": 100
Parsing String "100" in base 16: 256
Parsing String "Google" in base 32: 562840238
Parsing String "20" in base 8: 16

Integer.valueOf()

El valueOf() se envía en tres sabores:

  • valueOf(String s) - Acepta una cadena y la analiza en un entero
  • valueOf(int i) - Acepta un int y lo convierte en un entero
  • valueOf(String s, int radix) - Acepta una cadena y devuelve un entero que representa el valor y luego lo analiza con la base dada

El método valueOf(), a diferencia del método parseInt(), devuelve un Integer en lugar de un int primitivo y también arroja una NumberFormatException si la cadena no se puede convertir correctamente y solo acepta números decimales:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
int i = 10;
String string1 = "100";
String string2 = "100";
String string3 = "Google";
String string4 = "20";

int number1 = Integer.valueOf(i);
int number2 = Integer.valueOf(string1); 
int number3 = Integer.valueOf(string3, 32); 
int number4 = Integer.valueOf(string4, 8); 

System.out.println("Parsing int " + i + ": " + number1);
System.out.println("Parsing String \"" + string1 + "\": " + number2);
System.out.println("Parsing String \"" + string3 + "\" in base 32: " + number3);
System.out.println("Parsing String \"" + string4 + "\" in base 8: " + number4);

Ejecutar este fragmento de código producirá:

1
2
3
4
Parsing int 10: 10
Parsing String "100": 100
Parsing String "Google" in base 32: 562840238
Parsing String "20" in base 8: 16

Integer.decode()

El método decode() acepta un solo parámetro y viene en un solo tipo:

  • decode(String s) - Acepta una cadena y la decodifica en un entero

El método decode() acepta números decimales, hexadecimales y octales, pero no admite binarios:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
String string1 = "100";
String string2 = "50";
String string3 = "20";

int number1 = Integer.decode(string1);
int number2 = Integer.decode(string2); 
int number3 = Integer.decode(string3); 

System.out.println("Parsing String \"" + string1 + "\": " + number2);
System.out.println("Parsing String \"" + string2 + "\": " + number2);
System.out.println("Parsing String \"" + string3 + "\": " + number3);

Ejecutar este fragmento de código producirá:

1
2
3
Parsing String "100": 50
Parsing String "50": 50
Parsing String "20": 20

Conclusión

Hemos cubierto uno de los temas fundamentales de Java y el problema común que enfrentan los desarrolladores: convertir una cadena en un número entero o int usando las herramientas incluidas con el JDK.

Licensed under CC BY-NC-SA 4.0