Ya habíamos publicado un artículo sencillo que nos ayudaba a contar las vocales de una palabra. Pero nos habéis pedido si podemos hacer uno que nos diga si el texto introducido es un número consonante o vocal en Java. Así que vamos a ello.
Preparando los arrays
El enfoque es muy sencillo y lo que vamos a crear son 3 arrays en Java. El primero contendrá las vocales:
char[] vocales = {'a','e','i','o','u'};
el segundo contendrá las consonantes:
char[] consonantes = {'b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z'};
y el tercero los números:
char[] numeros = {'0','1','2','3','4','5','6','7','8','9'};
Lectura de caracteres
Lo que haremos será que cuando pidamos al usuario que nos introduzca por consola un carácter comprobaremos si este está dentro de uno de estos arrays. Pero, ¿cómo pedimos que nos introduzca un dato por consola? Pues en este caso vamos leer directamente por la entrada con System.in
. Tenemos que saber que el campo System.in
es una clase InputStream
.
char c = (char) System.in.read();
Vemos que nos apoyamos en el método .read()
y que convertimos mediante una operación de «casting» a un tipo char
.
Buscando en los Arrays
Ahora pasamos a buscar en los arrays. La búsqueda un carácter la realizaremos convirtiendo el array a una cadena y mediante el método .indexOf()
. Este método nos devuelve un número entero con la posición del carácter buscado su está dentro del array o nos devuelve un número negativo si no lo encuentra. Así que validaremos que sea un número mayor de 0.
Como hay que buscar en tres arrays montamos un método que reciba un array y el carácter buscado para poder optimizar el código:
public static boolean esUn(char[] caracteres, char c) { return (new String(caracteres).indexOf(c) >= 0)?true:false; }
Tomando la decisión de si es un número, consonante o vocal en Java
Por último lo que haremos será ir preguntando por los diferentes array mediante el método .esUn() que hemos creado para ver si es de alguno de los tres tipos o por si el contrario el usuario ha introducido por teclado otra cosa. Estas decisiones nos quedarían de la siguiente manera:
try { System.out.println("Introduce un carácter en la consola y pulsa intro"); char c = (char) System.in.read(); if (esUn(consonantes,c)) { System.out.println("Has insertado una consonante"); } else if (esUn(numeros,c)) { System.out.println("Has insertado un número"); } else if (esUn(vocales,c)) { System.out.println("Has insertado una vocal"); } else { System.out.println("Has insertado algo que no es una consonante, ni un número, ni una vocal") } } catch (IOException ioe) { ioe.printStackTrace(); }
Con esto ya habríamos conseguido la sencilla forma de validar si el carácter introducido por consola por parte del usuario es un número, consonante o vocal en Java. Y aquí un reto, ¿Os atreveríais a realizarlo y simplificarlo mediante expresiones regulares? Si alguien lo propone lo publicaremos y explicaremos con su nombre. Animaros.