manipulação de string III

3 respostas
Algebra

como posso fazer uma função rápida para tirar acentos?

3 Respostas

eduardoac

Bom dia,

Não pesquisei muito para você, mas achei dois códigos, veja se serve para seu caso:

private static final char[] FIRST_CHAR =   
      (" !'#$%&'()*+\\-./[telefone removido]:;<->?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"  
         + "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ E ,f'.++^%S<O Z  ''''.-"  
         + "-~Ts>o ZY !C#$Y|$'(a<--(_o+23'u .,1o>113?AAAAAAACEEEEIIIIDNOO"  
         + "OOOXOUUUUyTsaaaaaaaceeeeiiiidnooooo/ouuuuyty")   
         .toCharArray();   
   private static final char[] SECOND_CHAR =   
      ("  '         ,                                               "  
         + "\\                                   $  r'. + o  E      ''  "  
         + "  M  e     #  =  'C.<  R .-..     ..>424     E E            "  
         + "   E E     hs    e e         h     e e     h ")   
         .toCharArray();   
   /**  
    * Efetua as seguintes normalizações:  
    * - Elimina acentos e cedilhas dos nomes;  
    * - Converte aspas duplas em simples;  
    * - Converte algumas letras estrangeiras para seus equivalentes ASCII  
    * (como ß = eszet, convertido para ss)   
    * - Põe um "\" antes de vírgulas, permitindo nomes como  
    * "Verisign, Corp." e de "\", permitindo nomes como " a \ b ";  
    * - Converte os sinais de = para -  
    * - Alguns caracteres são removidos:  
    * -> os superiores a 255,  
    * mesmo que possam ser representados por letras latinas normais  
    * (como S, = U+015E = Latin Capital Letter S With Cedilla);  
    * -> os caracteres de controle (exceto tab, que é trocado por um espaço)  
    * @param str A string a normalizar.  
    * @return A string normalizada.  
    */  
   public static String normalize(String str) {   
      char[] chars = str.toCharArray();   
      StringBuffer ret = new StringBuffer(chars.length * 2);   
      for (int i = 0; i < chars.length; ++i) {   
         char aChar = chars[i];   
         if (aChar == ' ' || aChar == '\t') {   
            ret.append(' '); // convertido para espaço   
         } else if (aChar > ' ' && aChar < '\u0100') {   
            if (FIRST_CHAR[aChar - ' '] != ' ') {   
               ret.append(FIRST_CHAR[aChar - ' '] ) ; // 1 caracter   
            }   
            if (SECOND_CHAR[aChar - ' '] != ' ') {   
               ret.append(SECOND_CHAR[aChar - ' '] ) ; // 2 caracteres   
            }   
         }   
      }   
  
      return ret.toString();   
   }
ou
public static String trocaAcentuacao(String acentuada) {   
    if (nulaOuVazia(acentuada)) {   
        return acentuada;   
    }   
    char[] acentuados = new char[] { 'ç', 'á', 'à', 'ã', 'â', 'ä', 'é', 'è', 'ê', 'ë', 'í', 'ì', 'î', 'ï', 'ó', 'ò', 'õ', 'ô', 'ö', 'ú', 'ù', 'û', 'ü' };   
  
    char[] naoAcentuados = new char[] { 'c', 'a', 'a', 'a', 'a', 'a', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u' };   
  
    for (int i = 0; i < acentuados.length; i++) {   
        acentuada = acentuada.replace(acentuados[i], naoAcentuados[i] );   
        acentuada = acentuada.replace(Character.toUpperCase(acentuados[i] ), Character.toUpperCase(naoAcentuados[i] ) );   
    }   
    return acentuada;   
}

Vou pesquisar mais se a Apache já tem algo pronto, deixando tudo UTF-8.
Abraços.

eduardoac

Pode dar uma olhada no projeto Apache Commons, veja se isso ajuda também:

http://commons.apache.org/lang/api/org/apache/commons/lang/StringEscapeUtils.html

Abraços!

Algebra

Muito obrigado

Abraços…

Criado 2 de novembro de 2009
Ultima resposta 2 de nov. de 2009
Respostas 3
Participantes 2