Existe alguma API que me ajude no seguinte:
Eu pretendo pesquisar por nomes de usuários numa base de dados, mas ao pesquisar, pretendo por exemplo, ao escrever no campo de pesquisa o nome “Joao” me devolva um “João” que conste na base de dados; que faça o mesmo com outos caracteres especiais como “c” e “ç”, etc. Portanto o input: Goncalo deve produzir os outputs “Goncalo” e “Gonçalo” que constam na base de dados.
Ouvi que as classes da Collection tratam isso. Vi a API, mas nao sei como.
Porém no banco de dados vc tem que habilitar uma opção que define como os campos de texto serão usados em consultas(case insensitive, acentos, etc). No MySQL é o ‘collation’ da coluna/tabela.
Se sua base for muito grande, o jeito mais correto de fazer isso é usar algum recurso do seu banco que permita a “full text search”, que já costuma ter esse recurso de ignorar acentos e cases.
Senão, se sua base for muito grande, você pode usar um quebra-galho, que é o de ter uma coluna adicional que tenha uma versão normalizada do nome (argh), ou então um código Soundex ou coisa parecida.
Isso lembra quando você tem de desenvolver uma base de dados para o mercado japonês - para o nome de cliente, você reserva dois campos: um para sua representação em kanji (por exemplo, 亜豆美雪 ) e outro com sua representação fonética em katakana (nesse caso, あずき みほ - Azuki Miho).
Isso é porque um nome pode ser escrito de N jeitos diferentes em ideogramas - um nome comum como Akira já vi escrito de 20 jeitos diferentes.
Pior ainda, dado um nome escrito em ideogramas, é aconselhável perguntar à pessoa que tem esse nome como é lido - esse nome é lido nesse caso como Miho mas poderia ser lido como Miyuki
Uma vez vi um programa em C em uma revista japonesa.
Os comentários eram em inglês (até porque a revista era bem antiga), mas havia uma coisa bizarra - onde você esperaria ver um “” você tinha um sinal de iene (¥):
Obrigado a todos. Mas eu gostava de ao inves de tratar isso no BD, queria dar um select nos nomes e armazenar numa string e tratar disso a nivel do java.