o problema desta vez é o seguinte, eu preciso fazer um tratamento de busca similar a este:
Strings1="O presidente dos Estado Unidos é Barack Obama"Strings2="A Região Centro-Oeste é composta por 3 Estados bem grandes"
Meu banco de dados:
“Estados Unidos”
objetivo
Eu preciso dizer que a palavra Estados Unidos encontra-se na String “s1”.
E tenho que obter falso para a String “s2”.
problema:
Como vocês perceberam falta um “s” no meio da string que estou querendo comparar com o valor que tenho no banco.
De que forma posso ter verdadeiro neste retorno ignorando o “s”(neste caso, porém pode haver necessidade de ignorar as letras “a” ou “o”).
Um probleminha muito chato, alguem pode me ajudar com relação a algum método que faça esse tipo de busca.
O Algoritmo de Levenshtein pode te ajudar, procure por ele no google. Ele calcula a “distância de levenshtein” entre duas strings, que quer dizer o minimo de caracteres que deve ser removido, substituido ou alterado na string1 para chegar a string2. Acho que cai bem pro seu caso, e com certeza deve ter por ai alguma implementação em Java.
Abraço
Adelar
Olá,
Seria uma consulta no banco, certo?
Não entendi de que forma seria ignorado. Dê um exemplo de como seria.
Att.
Algebra
Não vou usar SQL, então tanto faz se essa palavra vem do banco ou não, certo?
e ignorar é que eu quero que “Estado Unidos” seja igual “Estados Unidos” na minha comparação
Sim Adelar eu já fui informado a respeito do regex…
quando tiver tempo tente me ajudar a criar um padrão
Desde já agradeço.
Adelar
Olá,
demorei mas não esqueci :roll:
Segue o código:
importjava.util.regex.*;publicclassTest7{publicstaticvoidmain(String[]args){Stringregex="Est.d.s? Unid.s";Patternpattern=Pattern.compile(regex);Strings1="O presidente dos Estado Unidos é Barack Obama";Strings2="A Região Centro-Oeste é composta por 3 Estados bem grandes";// verificando se o padrão se aplica à string 1Matchermatcher=pattern.matcher(s1);if(matcher.find())System.out.println("s1="+matcher.group());// verificando se o padrão se aplica à string 2matcher=pattern.matcher(s2);if(matcher.find())System.out.println("s2="+matcher.group());}}
O padrão utilizado foi:
"Est.d.s? Unid.s"
onde,
. - significa que qualquer caractere pode estar presente no lugar. Se precisar utilizar o ponto (.) no padrão deverá ser utilizado \\. na posição onde o pondo deve estar (neste caso é duas barrras invertidas pois no Java para imprimir \ deve-se usar \\ nas strings).
s? - significa que o s pode ou não estar presente