Retirando acentuação antes de inserir no banco de dados
22 respostas
P
paradiso
Bom dia,
Estou fazendo um programa que antes de fazer a inserção no banco de dados seria necessário retirar todos os acentos. Me disseram q o replaceAll resolveria meu problema, mas eu fiz alguns testes e a frase com acentuação continuava mesma coisa…
Õbrigado,
desculpem-me pela identação…mas acho que esta faltando aqui no forum do guj o suporte as TAB!!!
espero ter ajudado…o método se torna grande…mas é estremamente mais rapido do que o String.replaceAll()!!!
[]'s dyorgio
cv1
dyorgio, “é” eh diferente de “e”. Pq fingir que ainda estamos em 1973 e nao usar unicode?
Mauricio_Linhares
Ora, porque todo mundo quer encher a cabeça de problemas quando vão enviar as informações de um programa Java pra um banco de dados :lol:
Tem algum banco que ainda não dá suporte a Unicode?
fredferrao
Me corrijam c eu estiver errado!! Mas eh justamente este o problema!! pois o usuario pode cadastrar tanto JOSÉ quanto JOSE, e ai na hora de fazer uma pesquisa ele tambem pode digitar tanto JOSÉ como JOSE, e ai ja viu a zebra, certos registros nao irao aparecer!! E vai tentar colocar na cabeça do usuario que ele deve acentuar corretamente ou nao usar o acento!!1
OBS. pelo menos no Firebird ele nao reconhece josé como jose!!!
dyorgio
bem a resposta é rapida e fácilll…
permitir que o usuario insira informações no banco acentuadas
prejudica e muito a pesquisa dessa mesma informação depois…
pois tem analfabeto que não sabe escrever as palavras corretamente(acentuadas)…e tem aqueles que não querem…
claro que isso é apenas para colunas que serão constantemente pesquisadas…
[]'s dyorgio
_fs
Deve ter um jeito melhor, mas esse aqui faz o serviço:
Gente, voces estao confundindo armazenamento de dados com busca de dados. Essas coisas, apesar de estarem geralmente controladas pela mesma coisa (o “BAAAAAANCO de dados” - diga isso com voz aterrorizante).
Praticamente todos os bancos que eu conheco tem suporte a alguma funcao do tipo soundex(), que faz pesquisa fonetica. Pra que fazer essas gambiarras nojentas? :?
_fs
cv, nem todo campo é verdejante como na ThoughWorks
bem meu amigos…
claro que a minha implementação do método que ytira acentos é um pouco…
vamos dizer…tosca(primaria)…porém repito que é a maneira mais rapida de fazer isso…
para quem conhece a linguagem java a fundo…(código fonte da classe String)…
sabe que o método ReplaceAll() chama pelo menos 20 métodos em cascata e
instancias uns 40 Objetos…
tudo isso para fazer uma pesquisa bem refinada…
por isso levando em consideração que essa funcionalidade(retirada de acentos) será ultilizada com muita frequencia…
usem o laço com o case
O pessoal aqui realmente gosta de mostrar que sabe fazer o serviço…
mas não se usa um trator pra carregar um punhado de areia!!!
não concordam?!?!?!
[]'s dyorgio
cv1
Concordo, e por isso mesmo a pesquisa pelo metodo soundex eh muito mais eficiente.
dyorgio
cv :
Concordo, e por isso mesmo a pesquisa pelo metodo soundex eh muito mais eficiente.
como!!! rapaz…isso é pratico…não tem melhor desempenho
nem daqui a 1000 anos!!!
tem loco pra tudo
[]'s dyorgio
_fs
hehe não ia falar nada cara … mas depois do seu “quem conhece a fundo” … melhor aprender que concatenação de strings é lento pra burro, e, se não me engano, 3 objetos são criado pra fazer s += “a” hehe
E quanto a campeonatinho de código mais rápido, fazendo algumas pequenas modificações no código do colega, ganhou do meu de loooonge e do seu código 100% mais rápido (arrumei pra cobrir maiusculas também). Testei com 500k repetições. Sem contar que não tem o seu elegantérrimo switch hehe
Nao vou nem entrar na discussao do algoritmo que o Lipe implementou (e que, por sinal, tem uma implementacao bem enxutinha, mas ainda assim dava pra se livrar do foo e fooUpper, usando uma String so).
Basta dizer que esse algoritmo eh ineficiente para o proposito que vc ta tentando implementar, que eh tornar a pesquisa de informacoes e nomes proprios numa base de dados o mais eficiente e tolerante a erros de grafia possivel. Basta dizer que, nesse algoritmo, “Luiz” e “Luis” continuam sendo diferentes.
Eis uma descricao do Soundex, com implementacoes de referencia:
Desculpe CV, mas eu tive que me registrar no site apenas para registrar o meu ponto de vista sobre o soundex
1o) Se a sua base de dados for grande, o tempo de pesquisa será infernalmente maior (imagine a pesquisa em um banco de dados de endereco com 700 mil registros)
2o) O soundex funciona muito bem para o idioma ingles, tipo : wood and wody, mas para outros idiomas nem sempre o resultado é o esperado
Retirado do site do Mysql:
Important: When using SOUNDEX(), you should be aware of the following limitations: