martes, 24 de junio de 2014

Saber si una cadena de caracteres son números en Java.


Supongamos que se pide hacer un programa que determine si una cadena introducida por teclado del usuario esta compuesta de puros números.

En Java se puede hacer de diversas maneras. En este ejemplo, se utilizaran 2 maneras.

Con fin de aprendizaje, se crearan métodos booleanos que nos retornen la respuesta.

Método 1 : - Jugando con las excepciones -

Para "crear" un número entero. Se usa la clase Integer.
Se crea una instancia y lo que recibe el constructor es una cadena de caracteres que es el número.

La instancia quedaría de esta manera: 
        int numero = new Integer(cadenaLeida);

Pero, ¿ qué pasa si lo que le mando no es un número, sino letras?
Se manda una excepción.

¿ Y qué es una excepción ?

Una excepción es un evento que ocurre durante la ejecución del programa que interrumpe el flujo normal de las sentencias.

En pocas palabras un evento que sucede cuando en el programa pasa algo que no debía de pasar.

Se manejan las excepciones por los bloques try - catch o la sentencia throws. En otra entrada al blog se abordara el tema de las excepciones.

Por el momento basta decir que el bloque try - catch vienen de la mano.

Se tiene que  todo lo que se encuentra entre las llaves del bloque try {...}, es lo que posiblemente cree un conflicto y arroje una excepción. El bloque catch {...} , lo que se encuentre dentro de el, es como se soluciona el problema o que pasa cuando sucede determinado error,dependiendo si se sabe cual es. El programador es el encargado de ver esta parte y determinar las posibles excepciones que al usuario le puedan aparecer.

¿Y cuál es la excepción para los números? 
La excepción que se arroja cuando lo que se espera es un número y lo que se manda es diferente, es la Excepción - NumberFormatException.

Teniendo en cuenta esto, el método completo terminaría de esta manera: 

    public static boolean metodo1(String cadenaLeida) {
        try {
            int numero = new Integer(cadenaLeida);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
En el método principal Main se manda a llamar de esta manera:

    public static void main(String[] args) {
        Scanner s = new Scanner (System.in);

        String numero = s.nextLine();
        System.out.println(metodo1(numero));
    }
Método 2 : - Utilizando expresiones Regulares -

Cadena1 = cadena leída por el teclado.
Cadena2 = Expresión regular para verificar si son solo números.

Se comprueba la cadena de caracteres si son solamente números utilizando un regex y un método prestablecido en la clase String. El método matches().

public boolean matches(String regex)

El método matches recibe una cadena [cadena2], que es el parámetro que debe llevar [expresión regular].
El método es booleano, retorna true si cumple con la especificación, de no ser así retorna false.

La expresión regular para saber si una cadena está compuesta de solo números positivos sin decimales es :

String soloNumeros = “[0-9]+”;

La cadena de caracteres que invoca este método es la cadena leída por el usuario *[cadena1].

cadena1.matches(soloNumeros);

El método de comprobación completo:
    public static boolean metodo2(String cadenaLeida) {
        String soloNumeros = "[0-9]+"; 
        return cadenaLeida.matches(soloNumeros);
    }
En el método principal Main se manda a llamar de esta manera:
    public static void main(String[] args) {
        Scanner s = new Scanner (System.in);

       // Cadena leída desde el teclado ingresada por el usuario.
        String numero = s.nextLine(); 

       //Imprime en Consola true-false, si la cadena es número
        System.out.println(metodo2(numero)); 
    }
De estas 2 maneras se puede comprobar si una cadena introducida por el usuario consta de puros números.
*Existen otras maneras de saber esto, en otras entradas al blog se verán otras formas.

No hay comentarios.:

Publicar un comentario