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.

Código:

public static String removeAccents(String str) {

    str = Normalizer.normalize(str, Normalizer.Form.NFD);

    str = str.replaceAll("[^\\p{ASCII}]", "");

    return str;

}