Esses dias precisei sujar colocar as mãos em um código Java para fazer um autocomplete onde as informações estariam armazenadas em memória com o Lucene. Eu precisava armazenar no Lucene um campo com as informações sem acento e retirar o acento do que a pessoa estava solicitando pelo autocomplete para comparar com esse campo, deixando o autocomplete “supimpa”.
No projeto havia uma classe StringUtils com um método removeAcentos, muito, mas MUITO feio! Eram vários replaces, um para cada letra acentuada. Eu olhei para o código e pensei… “Eu acho Java feio, mas não é possível que não tenha algo mais inteligente que essa tralha!”. Pois bem, depois de algumas pesquisas eis aqui o novo código.
No projeto havia uma classe StringUtils com um método removeAcentos, muito, mas MUITO feio! Eram vários replaces, um para cada letra acentuada. Eu olhei para o código e pensei… “Eu acho Java feio, mas não é possível que não tenha algo mais inteligente que essa tralha!”. Pois bem, depois de algumas pesquisas eis aqui o novo código.
Código:
public static String removeAccents(String str) {
str = Normalizer.normalize(str, Normalizer.Form.NFD);
str = str.replaceAll("[^\\p{ASCII}]", "");
return str;
}