Desculpe, seu navegador não suporta JavaScript! Casa Open: Removendo acentos de String no Java

Removendo acentos de String no Java

Você programa a mais de um mês? Se sim, é provável que já precisou retirar acentos de um String. Para isso, existe a forma feia, chata e antipática de fazer (que por sinal é a que mais vejo) e a forma bonita e elegante (que raramente vejo).



 Forma feia, chata e antipática
public String removeAcentos (String string){  
      string = string.replaceAll("[ÂÀÁÄÃ]","A");  
      string = string.replaceAll("[âãàáä]","a");  
      string = string.replaceAll("[ÊÈÉË]","E");  
      string = string.replaceAll("[êèéë]","e");  
      string = string.replaceAll("ÎÍÌÏ","I");  
      string = string.replaceAll("îíìï","i");  
      string = string.replaceAll("[ÔÕÒÓÖ]","O");  
      string = string.replaceAll("[ôõòóö]","o");  
      string = string.replaceAll("[ÛÙÚÜ]","U");  
      string = string.replaceAll("[ûúùü]","u");  
      string = string.replaceAll("Ç","C");  
      string = string.replaceAll("ç","c");   
      string = string.replaceAll("[ýÿ]","y");  
      string = string.replaceAll("Ý","Y");  
      string = string.replaceAll("ñ","n");  
      string = string.replaceAll("Ñ","N");  
      return string;  
}


 Forma bonita e elegante
public static String removeAcentos(String string) {
    if (string != null){
        string = Normalizer.normalize(string, Normalizer.Form.NFD);
        string = string.replaceAll("[^\\p{ASCII}]", "");
    }
    return string;
}


PS. Na verdade existem várias formas de fazer isso.

4 comentários:

  1. Este comentário foi removido pelo autor.

    ResponderExcluir
  2. Não é a mesma coisa, o primeiro troca letras com acentos por letras sem acentos, enquanto que o segundo remove a letra, não substituindo por nenhuma outra.

    ResponderExcluir
  3. Clayton, sao dois comandos. O primeiro faz a troca dos caracteres acentuados pelos correspondentes nao acentuados:
    Normalizer.normalize(string, Normalizer.Form.NFD)

    O segundo remove "sujeiras" deixadas no processo:
    string.replaceAll("[^\\p{ASCII}]", "");

    ResponderExcluir
  4. A segunda opção funciona perfeitamente. Obrigado!

    ResponderExcluir

Casa Open | by Samuel Vinícius, Belo Horizonte - MG. Powered by Blogger