Strings - Can somebody help me?

Olá amigos sou eu outra vez,

o problema desta vez é o seguinte, eu preciso fazer um tratamento de busca similar a este:

String s1 = "O presidente dos Estado Unidos é Barack Obama"
String s2 = "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.

Desde já agradeço.

Olá,

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

Olá,
Seria uma consulta no banco, certo?

Não entendi de que forma seria ignorado. Dê um exemplo de como seria.

Att.

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

Neste caso você deverá usar regex. Segue um tutorial que mostra a idéia http://www.arquivodecodigos.net/dicas/java-aprenda-a-usar-expressoes-regulares-em-java-1311.html.
Não me lembro de cabeça agora qual padrão seria, mas amanhã se você não encontrar envio como ele deveria ser.

Att.

Sim Adelar eu já fui informado a respeito do regex…

quando tiver tempo tente me ajudar a criar um padrão :slight_smile:

Desde já agradeço.

Olá,
demorei mas não esqueci :roll:
Segue o código:

[code]import java.util.regex.*;
public class Test7 {
public static void main(String[] args) {
String regex = “Est.d.s? Unid.s”;

    Pattern pattern = Pattern.compile(regex);

    String s1 = "O presidente dos Estado Unidos é Barack Obama";  
    String s2 = "A Região Centro-Oeste é composta por 3 Estados bem grandes";  

    // verificando se o padrão se aplica à string 1
    Matcher matcher = pattern.matcher(s1);
    
    if(matcher.find())
    	System.out.println("s1="+matcher.group());
    
    // verificando se o padrão se aplica à string 2
    matcher = pattern.matcher(s2);
    
    if(matcher.find())
    	System.out.println("s2="+matcher.group());
}

}[/code]
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

Simples, não é?

Segue um link de como usar ERs http://guia-er.sourceforge.net/ e um testador http://www.piazinho.com.br/exemplos.html#1… é bem útil, principalmente pq isto é uma coisa fácil de esquecer :wink:

Esqueci de falar… no GUJ é mantido um post com material sobre ERs… segue o link: http://www.guj.com.br/posts/list/103520.java

Att.