Java: Cómo comparar cadenas ignorando acentos / How to compare Strings ignoring accents

Hoy enfrenté un problema: comparar cadenas ignorando acentos. Las soluciones propuestas en el artículo Unaccent letters no me gustaron por ser poco eficientes. He aquí la mejor, estándar y más rapida solución: usar la clase java.text.Collator, con un valor PRIMARY en strength:

Collator esMXCollator = Collator.getInstance(new Locale("es", "MX"));
sMXCollator.setStrength(Collator.PRIMARY);
boolean iguales = 0 == esMXCollator.compare("Querétaro", "Queretaro"); // iguales == true

Este collator también ignora mayúsculas y minúsculas.

Today, I faced a challenge: to compare Strings ignoring accents. I did not like solutions on Unaccent letters because they are unefficient. Here is the best, more standard and quick solution: to use java.text.Collator class, using a strength value of PRIMARY:

Collator esMXCollator = Collator.getInstance(new Locale("es", "MX"));
sMXCollator.setStrength(Collator.PRIMARY);
boolean iguales = 0 == esMXCollator.compare("Querétaro", "Queretaro"); // iguales == true

This collator is case insensitive too.

Leave a comment