jueves, 3 de octubre de 2013

Crear un entero a partir de un String en Java

¿Les ha ocurrido que en ocasiones tenemos una variable en forma de String y necesitamos guardarla en un entero?. Pues a mi si, y en este post les enseñare como hacerlo en Java de dos formas diferentes:
  1. Haciendo uso de la función parseInt().
  2. Usando el constructor de la clase Integer.

Usando la función parseInt().

La función parseInt()  permite, a partir de un String, obtener un número entero. Por ejemplo, en el siguiente código se observa un uso de esta función:
 
public class PruebasBlog {
    public static void main(String[] args) {
        String numeroString = "1234";
        int numeroInt;
        numeroInt = Integer.parseInt(numeroString);
        System.out.println("Número: " + numeroInt);
    }

El anterior código entrega como resultado "Número: 1234". De esta manera hemos el String "1234" en el número 1234.

La anterior no es la única utilidad de parseInt(); imaginemos que nuestro String esta escrito en una base diferente a la décimal, como por ejemplo en hexadecimal, ¿cómo guardar este valor en decimal?:  pues usando el parámetro radix. Para aclarar esto un poco veamos el siguiente ejemplo:
 
public static void main(String[] args) {
        String numeroString = "1A2";
        int numeroInt;
        // parseInt(String s, int radix)
        numeroInt = Integer.parseInt(numeroString, 16);
        System.out.println("Número: " + numeroInt);
    } 

En el caso anterior el resultado será "Número: 418". ¿Por qué?, porque la función esta convirtiendo el String "1A2", que se encuentra en hexadecimal (por eso radix vale 16), a decimal. Radix toma los valores de acuerdo a la base:

Base Binaria Octal Decimal Hexadecimal
Radix 2 8 10 16

Si desean conocer más acerca de esta función, pueden consultar la documentación oficial de Oracle aquí.

Usando el Constructor de la Clase Integer

Recordemos que en el mundo de la programación orientada a objetos todo es un objeto; luego, así pueda sonar raro, los enteros también lo son. Siguiendo esta lógica, y considerando lo anterior, un número entero puede ser inicializado mediante un constructor. ¿Y adivinen qué?, ese constructor puede recibir como parámetro un String. Veámoslo en un ejemplo:
 
public static void main(String[] args) {
        String numeroString = "1234";
        int numeroInt1 = new Integer(numeroString);
        int numeroInt2 = new Integer("4321");
        System.out.println("Número 1: " + numeroInt1 + ", Número 2: " + numeroInt2);
    }

El anterior código producirá "Número 1: 1234, Número 2: 4321". En este caso numeroInt1 se crea a partir de un String pre-existente, mientras que en numeroInt2 ese String se especifica de manera explicita.

Errores que podemos cometer

Para terminar esta entrada, quiero mostrarles que sucede si no hacemos un buen uso de lo anterior. El siguiente código muestra un error muy común: tratar de convertir en entero algo ilógico (en este caso la letra p):
 
public static void main(String[] args) {
        String numeroString = "p";
        int numeroInt1 = new Integer(numeroString);
        System.out.println("Número 1: " + numeroInt1);
    }

Al intentar correr lo anterior el compilador arrojará una NumberFormatException, como se muestra en la siguiente figura:

Figura 1: Error al compilar el anterior código


 Si observamos la linea subrayada notaremos que se nos advierte que se genera un NumberFormatException para la entrada String "p", o en otras palabras, ¡"p" no puede ser convertido a entero!.

No hay comentarios:

Publicar un comentario