boa tarde a todos, eu to precisando de ajuda aqui…
eu to tentando implementa um lexico aqui, e to comcertos problemas…
o que acontece é o seguinte:
eu peço uma frase por JOptionPane (ao menos por enquanto, pra testa de forma pratica, alterando facil a string pra testar mtas diferentes)
eu pego essa frase e separo elas por palavras, jogando cada palavra dessa frase em um espaço dentro do arrayList (isso ta funcionano)
ok…ai eu kero depois disso varrer o arraylist e ver se cada uma dessas palavras também contem dentro de um outro ArrayList, e avisa caso alguma palavra não contenha.
exemplo: eu pego as palavras e jogo no array token, depois eu verifico se cada uma delas tem tb dentro do array palavra, pra poder avisa caso esse token nao exista dentro do otro array.
o problema é que certas palavras que eu to digitando não ta reconhecendo
import javax.swing.JOptionPane;
import java.util.ArrayList;
public class Teste {
/** Creates a new instance of Teste */
public Teste() {
}
public static void main (String args[]){
int comecoT=0, tamanhoFrase=0;
boolean comT=false, resultado=false;
ArrayList<String> palavra = new ArrayList();
ArrayList<String> token = new ArrayList();
String saida="";
palavra.add("pa1");
palavra.add("pa2");
palavra.add("pa3");
palavra.add("pa4");
palavra.add("pa5");
String frase=JOptionPane.showInputDialog("digite a frase: ");
for (int i=0;i<frase.length();i++){
if (comT==false){
if (!frase.substring(i, i+1).equals(" ")){
comecoT=i;
comT=true;
}
//se cair no else é pq ja começo o token, começa a le-lo
}else{
//esse if serve pra descobrir que o token acabou (encontrando espaço
//no final do token ou o proprio final da frase, e coloca o token
//dentro do arrayList token, depois diz aonde começa o proximo token e
//reseta a comecotoken pra nao pega token enquanto nao ver o começo dele
if (frase.substring(i, i+1).equals(" ")||i==frase.length()-1){
token.add(frase.substring(comecoT, i+1));
comecoT=i+1;
comT=false;
}
}
}
//só pra demonstrar que separo ok os tokens da frase
for (int i=0;i<token.size();i++){
System.out.println(token.get(i));
}
// até aqui funciona normal, o problema é daki pra baixo que compara se o token tem no array palavra
for (int i=0;i<token.size();i++){
resultado=false;
for (int j=0;j<palavra.size();j++){
if (token.get(i).equals(palavra.get(j))){
resultado=true;
break;
}
}
if (resultado==false){
saida+="não foi reconhecida a palavra "+token.get(i)+"\n";
}
}
if (!saida.equals("")){
JOptionPane.showMessageDialog(null, saida);
}
}
}
Bom, particularmente achei a sua solução um tanto complexa ou não entendi bem o que você está precisando. Tente deixa-lá mais simples.
Por exemplo você pode usar o método split da classe String para quebrar a frase em um array por espaço ou utilizar a classe StringTokenizer ao invés de substring.
Na interface List tem o método removeAll que pode ser aplicado ao seu exemplo, pois após você preencher as duas listas e quiser saber as palavras existentes no “token” e que não existem no “palavra” basta vc fazer:
token.removeAll(palavra);
Se por algum motivo você precisar manter a coleção original faz um clone dela para outra lista.
No seu exemplo algumas palavras não eram encontradas. Está sendo considerado upper/lower case? Será que alguma palavra não está sendo gravada com o espaço?
desculpem a duplicação do post…a net aki ta ruim, eu cliquei 2 vezes…
obrigado pelas dicas kra… eu ja tinha ouvido fala q tinha metodo que separava a string por tokens entre espaços, mais eu quero eu mesmo cria a logica (afinal de contas… é ai q o bicho pega…rs)
isso ai é pra um projeto que servirá de TCC, sendo assim to kerendo eu mesmo cria o q depender de logica e nao usa metodos que ja façam o trabalho pro mim…