validar tildes sustituir remover quitar escape acentos java string localization filter diacritics

tildes - validar acentos en java



Búsqueda de cadenas de Java ignorando acentos (3)

Estoy tratando de escribir una función de filtro para mi aplicación que tomará una cadena de entrada y filtrará de una forma u otra todos los objetos que no coinciden con la entrada dada. La forma más fácil de hacer esto sería usar el método contains de String, es decir, simplemente verificar si el objeto (la variable String en el objeto) contiene la cadena especificada en el filtro, pero esto no tendrá en cuenta los acentos.

Los objetos en cuestión son básicamente Personas, y las cadenas con las que trato de hacer corresponder son nombres. Entonces, por ejemplo, si alguien busca a Joao, esperaría que João se incluyera en el conjunto de resultados. Ya he utilizado la clase Collator en mi aplicación para ordenar por nombre y funciona bien porque puede hacer una comparación, es decir, utilizando la configuración regional de Reino Unido antes que b pero después de a. Pero obvisouly no devuelve 0 si compara a y á porque no son iguales.

Entonces, ¿alguien tiene alguna idea de cómo podría hacer esto?


Collator devuelve 0 para a y á, si lo configura para ignorar signos diacríticos:

public boolean isSame(String a, String b) { Collator insenstiveStringComparator = Collator.getInstance(); insenstiveStringComparator.setStrength(Collator.PRIMARY); // Collator.PRIMARY also works, but is case senstive return insenstiveStringComparator.compare(a, b) == 0; }

isSame ("a", "á") se vuelve verdadero ahora


He escrito una clase para buscar a través de textos árabes ignorando el diacrítico (NO eliminándolos). tal vez puedas entender la idea o usarla de alguna manera.

DiacriticInsensitiveSearch.java


Utiliza java.text.Normalizer y una toma de regex para deshacerte de los java.text.Normalizer diacríticos .

public static String removeDiacriticalMarks(String string) { return Normalizer.normalize(string, Form.NFD) .replaceAll("//p{InCombiningDiacriticalMarks}+", ""); }

Que puedes usar de la siguiente manera:

String value = "Joáo"; String comparisonMaterial = removeDiacriticalMarks(value); // Joao