En este post vamos a implementar un algoritmo para saber si una cadena es un pangrama, usando el lenguaje de programación Java.
En caso de que no lo sepas, se denomina pangrama (de manera simple) al texto que contiene todas las letras del alfabeto.
Por ejemplo, el siguiente texto es un pangrama, pues contiene todas las letras del alfabeto español:
El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja
Veamos cómo comprobar si string es pangrama en Java.
Explicación del algoritmo
Lo único que tenemos que hacer es comprobar que la cadena tenga cada letra del abecedario o alfabeto. Por lo tanto, tenemos que recorrer todo el alfabeto de la A a la Z y comprobar que la cadena contenga la letra.
Si terminamos de recorrer el alfabeto y la cadena tuvo cada letra, entonces decimos que la cadena sí es pangrama.
En caso de que se encuentre que una letra no está dentro de la cadena, indicamos que no es pangrama.
Para reducir las comparaciones vamos a convertir la cadena a mayúscula, y recorrer el alfabeto en mayúsculas. De modo que no importa si la cadena original tiene minúsculas, pues se convertirá y comprobará con mayúsculas.
Función pangrama en Java
Es momento de ver la función. Queda así:
public static boolean esPangrama(String cadena) {
cadena = cadena.toUpperCase(); // Convertir a mayúscula para simplificar comparaciones
String letrasDelAlfabeto = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
for (int x = 0; x < letrasDelAlfabeto.length(); x++) {
if (!cadena.contains(Character.toString(letrasDelAlfabeto.charAt(x)))) {
return false;
}
}
return true;
}
Recibe una cadena y regresa un booleano indicando si la cadena es pangrama.
Demostración y ejemplo
Ahora veamos cómo usar la función. Todo el código queda así:
/*
____ _____ _ _ _
| _ \ | __ \ (_) | | |
| |_) |_ _ | |__) |_ _ _ __ _____| |__ _ _| |_ ___
| _ <| | | | | ___/ _` | '__|_ / | '_ \| | | | __/ _ \
| |_) | |_| | | | | (_| | | / /| | |_) | |_| | || __/
|____/ \__, | |_| \__,_|_| /___|_|_.__/ \__, |\__\___|
__/ | __/ |
|___/ |___/
Blog: https://parzibyte.me/blog
Ayuda: https://parzibyte.me/blog/contrataciones-ayuda/
Contacto: https://parzibyte.me/blog/contacto/
Copyright (c) 2020 Luis Cabrera Benito
Licenciado bajo la licencia MIT
El texto de arriba debe ser incluido en cualquier redistribucion
*/
public class Main {
public static void main(String[] args) {
String cadenasParaProbar[] = { "Mi hijo degustó en el festival de bayas una extraña pizza de kiwi con queso",
"Hola",
"El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja",
"ABCDEFGHIJKLMNÑOPQRSTUVWXYZ", // Debería ser true
"ABCDEFGHIJKLMNÑOPQRSTUVWXY", // Sin Z
};
for (String cadena : cadenasParaProbar) {
System.out.printf("La cadena '%s' es pangrama? %b\n", cadena, esPangrama(cadena));
}
}
public static boolean esPangrama(String cadena) {
cadena = cadena.toUpperCase(); // Convertir a mayúscula para simplificar comparaciones
String letrasDelAlfabeto = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
for (int x = 0; x < letrasDelAlfabeto.length(); x++) {
if (!cadena.contains(Character.toString(letrasDelAlfabeto.charAt(x)))) {
return false;
}
}
return true;
}
}
La salida es correcta como se puede apreciar en la imagen de ejecución:
Nota: en Windows me parece que hay un problema con la Ñ, o al menos en la terminal cuando se usa javac
.
¿Te gusta la programación en Java? en mi blog encontrarás más contenido sobre Java.