Regex to replace special characters - JAVA

3

I have this function in Java, quite dirty and a little bad, what it does is pick up a word and replace the 'special' characters, I would like to know another more ergonomic way to do it, if it is with a Regex or with something else.

private String reemplazarCaracteresEspeciales(String palabra) {
        palabra = palabra.replace("ñ", "n");palabra = palabra.replace('|', '_');palabra = palabra.replace(" ", "_");
        palabra = palabra.replace('à', 'a'); palabra = palabra.replace('á', 'a'); palabra = palabra.replace('À', 'A'); palabra = palabra.replace('Á', 'A');
        palabra = palabra.replace('è', 'e'); palabra = palabra.replace('é', 'e'); palabra = palabra.replace('È', 'E'); palabra = palabra.replace('É', 'E');
        palabra = palabra.replace('ì', 'i'); palabra = palabra.replace('í', 'i'); palabra = palabra.replace('Ì', 'I'); palabra = palabra.replace('Í', 'I');
        palabra = palabra.replace('ò', 'o'); palabra = palabra.replace('ó', 'o'); palabra = palabra.replace('Ò', 'O'); palabra = palabra.replace('Ó', 'O');
        palabra = palabra.replace('ù', 'u'); palabra = palabra.replace('ú', 'u'); palabra = palabra.replace('Ù', 'U'); palabra = palabra.replace('Ú', 'U');
        palabra = palabra.replace('\b', '_'); palabra = palabra.replace('/', '_'); palabra = palabra.replace(':', '_'); palabra = palabra.replace('<', '_');
        palabra = palabra.replace('*', '_'); palabra = palabra.replace('?', '_'); palabra = palabra.replace('"', '_'); palabra = palabra.replace('>', '_');

        return palabra;

    }
    
asked by Richard Sánchez Coliao 26.09.2018 в 11:54
source

1 answer

3

You can make two lists. One, with the characters that you do not need, and another, with the characters with which you will replace it. Then you travel with a foreach the word and if you find some letter 'erroneous' susituyes. It would be like this:

private String reemplazarCaracteresEspeciales(String palabra) {
        String[] caracteresMalos = {" ","ñ","|","à","á","À","Á","è","é","È","É","ì","í","Ì","Í","ò","ó","Ò","Ó","ù","ú","Ù","Ú","\b","/",":","<","*","?",">"};
        String[] caracteresBuenos = {"_","n","_","a","a","A","A","e","e","E","E","i","i","I","I","o","o","O","O","u","u","U","U","_","_","_","_","","_","_"};

        for (String letraMala : caracteresMalos) {
            if(palabra.contains(letraMala)){
                palabra = palabra.replace(letraMala,caracteresBuenos[Arrays.asList(caracteresMalos).indexOf(letraMala)]);
            }
        }

        return palabra;

    }
    
answered by 26.09.2018 / 13:18
source