Eliminar acentos pero mantener tildes (Ñ, ñ) de una cadena

publicado por: Anonymous

tengo el siguiente código, que me funciona.

public static String quitaDiacriticos(String s) {
    s = Normalizer.normalize(s, Normalizer.Form.NFD);
    s = s.replaceAll("[\p{InCombiningDiacriticalMarks}]", "");
    return s;
}

esta función quita todos las tildes pero incluye la letra Ññ .. porque lo devuelve como una Nn

Le paso por ejemplo ‘ÑOñó’

y me devuelve ‘Nono’

necesito que me devuelva ‘ÑOño’

solución

Lo que deseas es eliminar los acentos (á, é, í, ó, ú) pero mantener las tilde o virgulilla (Ñ, ñ).

Puedes usar un método donde indiques reemplazar únicamente los caracteres unicode para el acento que son u0300 y u0301:

introducir la descripción de la imagen aquí

Para esto puedes hacer uso del método Normalizer.normalize() , el cual transforma el texto Unicode en una forma compuesta o descompuesta equivalente, lo que permite ordenar y buscar texto con mayor facilidad, de esta forma puedes reemplazarlo:

public String eliminaAcentos(String s) {
    if(s == null || s.trim().length() == 0) {
        return "";
    }
    return Normalizer.normalize(s, Normalizer.Form.NFD).replaceAll("[u0300-u0301]", "");
}

ahora como ejemplo llamando el método anterior:

System.out.println(eliminaAcentos("áéíóú Ñoño"));

tendrás como salida:

aeiou Ñoño
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *