2010-11-08 12 views
28

posibles duplicados:
Remove diacritical marks (ń ǹ ň ñ ṅ ņ ṇ ṋ ṉ ̈ ɲ ƞ ᶇ ɳ ȵ) from Unicode chars
Is there a way to get rid of accents and convert a whole string to regular letters?Java cambio áéőűú a aeouu

¿Cómo puedo hacer esto? Gracias por la ayuda

+1

duplicado: http://stackoverflow.com/questions/1453171/nnn-o-remove-diacritical-marks-from –

+0

Consulte http://stackoverflow.com/questions/1453171/nnn-or-remove-diacritical -marks-from – softveda

+0

@Greg esa es una pregunta de .net –

Respuesta

7

Primero - no deberías. Estos símbolos tienen propiedades fonéticas especiales que no deben ignorarse.

La manera de convertirlas es crear un Map que mantiene cada par:

Map<Character, Character> map = new HashMap<Character, Character>(); 
map.put('á', 'a'); 
map.put('é', 'e'); 
//etc.. 

y luego bucle de los caracteres de la cadena, la creación de una nueva cadena llamando map.get(currentChar)

+5

+1 por * no debe * –

+1

otro +1 por * no debería *. Un reemplazo para 'ä' en idioma alemán sería "ae" (sorpresa: dos caracteres ...) y apuesto a que hay muchos más ejemplos para otros idiomas hablados. –

+2

@Andreas cierto, creo que eso requeriría una función Normalizador específica del lugar (buena suerte con eso :-)). –

9

Puede utilizar java.text.Normalizer para separar las letras de base y los signos diacríticos, luego eliminar el último a través de una expresión regular:

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

Utilicé algo similar que hizo el trabajo: Pattern.compile ("\\ p {InCombiningDiacriticalMarks} +"). Matcher (nfdNormalizedString) .replaceAll (""); –

87

Creo que su qu estion es el mismo que éstos:

y por lo tanto la respuesta es también el mismo:

String convertedString = 
     Normalizer 
      .normalize(input, Normalizer.Form.NFD) 
      .replaceAll("[^\\p{ASCII}]", ""); 

Ver

código de ejemplo:

final String input = "Tĥïŝ ĩš â fůňķŷ Šťŕĭńġ"; 
System.out.println(
    Normalizer 
     .normalize(input, Normalizer.Form.NFD) 
     .replaceAll("[^\\p{ASCII}]", "") 
); 

de salida:

Esta es una cadena enrrollado

+0

+1, Gran respuesta. – aioobe

+1

Afortunadamente solo tuve que copiarlo y pegarlo de una pregunta anterior (incluido el primer párrafo) :-) –

+0

Lo siento pero es Android, no solo Java, la clase de normalizador no está en los sistemas Android – lacas

Cuestiones relacionadas