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:
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
Postar um comentário