Warning: include(/homepages/28/d322425856/htdocs/v3rgu1/blog/wp-content/themes/v3rgu1/functions.php): failed to open stream: Permission denied in /homepages/28/d322425856/htdocs/v3rgu1/blog/wp-settings.php on line 329

Warning: include(): Failed opening '/homepages/28/d322425856/htdocs/v3rgu1/blog/wp-content/themes/v3rgu1/functions.php' for inclusion (include_path='.:/usr/lib/php7.4') in /homepages/28/d322425856/htdocs/v3rgu1/blog/wp-settings.php on line 329
Eliminar acentos y caracteres especiales en Java | v3rgu1.com
27 09
11
2010

Eliminar acentos y caracteres especiales en Java

En ocasiones nos puede resultar útil eliminar de una cadena de texto caracteres especiales, acentos o diacríticos (tíldes, diéresis, eñes, cedillas, etc).

Por ejemplo, en algunos sistemas de reservas aéreas o GDSs, como es el caso de Amadeus, necesitamos limpiar todos los textos que hacen referencia a nombres de pasajeros, direcciones y demás, de aquellos caracteres especiales no soportados por el sistema.

Vamos a ver 2 formas diferentes de eliminar estos caracteres especiales y acentos con 2 técnicas distintas:

1. Reemplazando cadenas de caracteres

    /**
     * Función que elimina acentos y caracteres especiales de
     * una cadena de texto.
     * @param input
     * @return cadena de texto limpia de acentos y caracteres especiales.
     */
    public static String remove1(String input) {
        // Cadena de caracteres original a sustituir.
        String original = "áàäéèëíìïóòöúùuñÁÀÄÉÈËÍÌÏÓÒÖÚÙÜÑçÇ";
        // Cadena de caracteres ASCII que reemplazarán los originales.
        String ascii = "aaaeeeiiiooouuunAAAEEEIIIOOOUUUNcC";
        String output = input;
        for (int i=0; i<original.length(); i++) {
            // Reemplazamos los caracteres especiales.
            output = output.replace(original.charAt(i), ascii.charAt(i));
        }//for i
        return output;
    }//remove1

2. Normalización Unicode. Descomposición canónica

Partamos en primer lugar del hecho de que un carácter puede ser representado de formas diferentes.
Visualicemos con un ejemplo estas diferentes formas de representar un mismo carácter:

        // Representación normal
        char c1 = 'í';
        // Representación UNICODE
        char c2 = '\u00ed';
        // Representación UNICODE en forma canónica
        char[] c3 = {'\u0069', '\u0301'};

¿En qué consiste la representación canónica?

La representación o descomposición canónica consiste simplemente (de forma muy resumida) en la descomposición del carácter en 2 partes:

– Parte 1: Letra base
– Parte 2: Acento

De esta forma, hemos podido representar el carácter i compuesto por la letra i (0x0061) y su acento (0x0301).

Una vez entendido el concepto de descomposición canónica, es hora de ponerlo en práctica para nuestro cometido: limpiar un texto de acentos y caracteres especiales obteniendo de esta manera un texto sólo de caracteres ASCII.

    /**
     * Función que elimina acentos y caracteres especiales de
     * una cadena de texto.
     * @param input
     * @return cadena de texto limpia de acentos y caracteres especiales.
     */
    public static String remove2(String input) {
        // Descomposición canónica
        String normalized = Normalizer.normalize(input, Normalizer.Form.NFD);
        // Nos quedamos únicamente con los caracteres ASCII
        Pattern pattern = Pattern.compile("\\p{ASCII}+");
        return pattern.matcher(normalized).replaceAll("");
    }//remove2

Comprobemos el resultado final de nuestras 2 técnicas:

        System.out.println("1. " + RemoveAccents.remove1("Mañana será un día mejor"));
        System.out.println("2. " + RemoveAccents.remove1("Mañana será un día mejor"));

Tags:


Fatal error: Uncaught Error: Call to undefined function v3_get_number_of_comments() in /homepages/28/d322425856/htdocs/v3rgu1/blog/wp-content/themes/v3rgu1/comments.php:19 Stack trace: #0 /homepages/28/d322425856/htdocs/v3rgu1/blog/wp-includes/comment-template.php(1213): require() #1 /homepages/28/d322425856/htdocs/v3rgu1/blog/wp-content/themes/v3rgu1/single.php(78): comments_template() #2 /homepages/28/d322425856/htdocs/v3rgu1/blog/wp-includes/template-loader.php(74): include('/homepages/28/d...') #3 /homepages/28/d322425856/htdocs/v3rgu1/blog/wp-blog-header.php(16): require_once('/homepages/28/d...') #4 /homepages/28/d322425856/htdocs/v3rgu1/blog/index.php(17): require('/homepages/28/d...') #5 {main} thrown in /homepages/28/d322425856/htdocs/v3rgu1/blog/wp-content/themes/v3rgu1/comments.php on line 19