2010-07-11 20 views
6

Necesito comparar los nombres de lugares europeos que se escriben usando el alfabeto latino con acentos (signos diacríticos) en algunos caracteres. Hay muchos nombres de Europa Central y del Este escritos con acentos como caracteres latinos en ž y ü, pero algunas personas escriben los nombres simplemente usando los caracteres latinos normales sin acentos como z y u.Eliminación de acentos (signos diacríticos) de caracteres latinos para comparar

Necesito una forma de que mi sistema reconozca, por ejemplo, mšk žilina siendo lo mismo que msk zilina, y similar para todos los demás caracteres acentuados utilizados. ¿Hay una manera simple de hacer esto?

Respuesta

11

Puede hacer uso de java.text.Normalizer y little regex para deshacerse de diacritical marks.

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

Ejemplo de uso:

String text = "mšk žilina"; 
String normalized = removeDiacriticalMarks(text); 
System.out.println(normalized); // msk zilina 
+0

perfecto, gracias. – Oliver

+0

De nada. – BalusC

+0

¿tal vez conoces un texto normalizador también para el objetivo C =) tengo el mismo problema –

Cuestiones relacionadas