Un palíndromo también llamado palindromo, palíndroma o palindroma, es una palabra, número o frase que se lee igual adelante que atrás. Fuente: Wikipedia.
Hoy veremos cómo saber o comprobar si una cadena o String de Java es un palíndromo. Podremos saber si una palabra es palíndroma, o incluso saber si una oración larga es palíndroma.
Para ello vamos a remover los espacios, comas y otros signos que no cuentan al hacer la comparación. Por poner un ejemplo, “A ti no, bonita” es un palíndromo si quitamos espacios y la coma.
Veamos entonces la función esPalindromo
en Java.
Antes de todo
Aprovecho este espacio para recomendarte un punto de venta gratuito en la nube. Por cierto, la captura del código fue tomada con Polacode y le puse la marca de agua con el programa WaterPy.
Explicación del algoritmo para saber si es un palíndromo en Java
Lo primero es quitar espacios en blanco, comas y esas cosas que no cuentan al comprobar si una palabra es palíndroma. También se convierte a una misma notación, es decir, convertimos la cadena a minúscula o a mayúscula pero no mezclado.
Después, se invierte la cadena (como vimos en este post) y se comprueba si la cadena, al ser invertida, es igual a la cadena original.
En caso de que sí sea igual al invertirla, se dice que es palíndroma.
Función que dice si una cadena es palíndronma/palíndromo en Java
Aquí dejo la función, la cual regresa un booleano
y recibe una cadena. Es estática porque así lo requiere la clase, pero lo que importa es el código, lo demás puedes modificarlo a tu gusto.
/**
Comprobar si es palíndromo en Java
@author parzibyte
*/
public static boolean esPalindromo(String cadena) {
// Convertir a minúscula y quitar espacios " ", puntos "." y comas ","
// También remplazar palabras con acento p.ej. í => i
cadena = cadena.toLowerCase().replace("á", "a").replace("é", "e").replace("í", "i").replace("ó", "o")
.replace("ú", "u").replace(" ", "").replace(".", "").replace(",", "");
// Invertir la cadena, y si es igual que la original entonces
// son palíndromos
String invertida = new StringBuilder(cadena).reverse().toString();
// Para invertir recomiendo ver
// https://parzibyte.me/blog/2019/02/20/invertir-cadena-string-java/
return invertida.equals(cadena);
}
Como lo dije, la función recibe una cadena o String
y devuelve true
o false
.
Para realizar el algoritmo que comprueba si es o no palíndromo, se convierte a minúscula y se le quitan los espacios y comas. También se remplazan las vocales acentuadas por las no acentuadas.
Ejemplo de uso
Aquí está el código completo que recorre un arreglo de cadenas y por cada una de ellas va indicando si la palabra es palíndroma; a veces también se prueba con algunas oraciones largas:
class Main {
public static void main(String[] args) {
String[] cadenas = { "La ruta natural", "Esto no es", "Parzibyte", "Hola", "Sol", "Ana", "Oro", "Oso",
"A ti no, bonita",
"Adivina ya te opina, ya ni miles origina, ya ni cetro me domina, ya ni monarcas, a repaso ni mulato carreta, acaso nicotina, ya ni cita vecino, anima cocina, pedazo gallina, cedazo terso nos retoza de canilla goza, de pánico camina, ónice vaticina, ya ni tocino saca, a terracota luminosa pera, sacra nómina y ánimo de mortecina, ya ni giros elimina, ya ni poeta, ya ni vida",
"A mamá, Roma le aviva el amor a papá y a papá, Roma le aviva el amor a Mamá", "Me gusta programar en Java" };
for (String cadena : cadenas) {
System.out.println("¿'" + cadena + "' es palíndromo? " + esPalindromo(cadena));
}
}
/**
Comprobar si es palíndromo en Java
@author parzibyte
*/
public static boolean esPalindromo(String cadena) {
// Convertir a minúscula y quitar espacios " ", puntos "." y comas ","
// También remplazar palabras con acento p.ej. í => i
cadena = cadena.toLowerCase().replace("á", "a").replace("é", "e").replace("í", "i").replace("ó", "o")
.replace("ú", "u").replace(" ", "").replace(".", "").replace(",", "");
// Invertir la cadena, y si es igual que la original entonces
// son palíndromos
String invertida = new StringBuilder(cadena).reverse().toString();
// Para invertir recomiendo ver
// https://parzibyte.me/blog/2019/02/20/invertir-cadena-string-java/
return invertida.equals(cadena);
}
}
Por cierto, ahí las cadenas son declaradas en el arreglo pero bien podrían ser introducidas por el usuario.
Descargar y probar función para saber si una cadena es palíndroma en Java
Si quieres, puedes descargar el código. Para ello te recomiendo instalar Java y también NetBeans.
Aprende más sobre Java aquí, y lee más sobre algoritmos aquí.