Trocar caracteres acentuados em Java

Quem nunca precisou fazer um if ou um switch case utilizando como condição o conteúdo de um objeto do tipo String que atire a primeira pedra...

Muitas vezes o conteúdo deste texto pode vir pode vir sem um padrão definido, como tudos os caracteres maiúsculos, minúsculos ou no padrão CamelCase. Ok, se esse for o problema os métodos toUpperCase() e toLowerCase() da classe String estão sempre aí para ajudar.

Mas e quando aparece um caractere acentuado? Aí o bicho pega!

Até podemos incrementar a nossa condicional contemplando um caso ou exclusivo, mas não estamos de fato resolvendo o problema.

Uma solução interessante é trocar todos os caracteres acentuados dessa String por caracteres sem acentuação. O método abaixo nos auxilia nesta tarefa:

private static String trocaCarscteresEspeciais(String texto){
  if(texto == null){return null;}
  if(texto.isEmpty()){return texto;}
  String caracEspecial = "ÁÉÍÓÚáéíóúÂÊÎÔÛâêîôûÃÕÇçÃãÕõÀÈÌÒÙàèìòùÄËÏÖÜäëïöü";
  String caracNormal   = "AEIOUaeiouAEIOUaeiouAOCcAaOoAEIOUaeiouAEIOUaeiou";
  Pattern pattern = Pattern.compile("[" + caracEspecial + "]");
  Matcher matcher = pattern.matcher(texto);
  int p, aux;
  char oldChar, newChar;
  while(matcher.find()){
   p = matcher.start();
   oldChar = texto.charAt(p);
   aux = caracEspecial.indexOf(oldChar);
   if(aux < 0){continue;}
   newChar = caracNormal.charAt(aux);
   texto = texto.replace(oldChar, newChar);
  }
  return texto;
 }

Caso você tenha uma solução mais otimizada fique à vontade para sugerir nos comentários.

Abraço!









Comentários

Postagens mais visitadas