Programa Busca Palavras Reservadas [RESOLVIDO]

6 respostas
gilmar_soares

Boa noite, estu fazendo um programa que deve procurar em um arquivo .java
palavras reservadas e falar quais encontrou.
Só que estou com um erro no for e ele não encontra todas..
gostaria de uma ajuda.

Classe Principal
/*
 * Nome: Gilmar Soares
 * Data: 20/03
 * Projeto: Buscar palavras reservadas Java
 */

import java.io.FileNotFoundException;
import java.io.IOException;

public class Principal {
	
	public static void main(String args[]) throws IOException
	{
		PalavrasReservadas palavra_reservada = new PalavrasReservadas();
		TestePalavras palavra = new TestePalavras();
		palavra.testePalavras(palavra_reservada.palavras);
		
	}

}
PalavrasReservadas
/*
 * Nome: Gilmar Soares
 * Data: 20/03
 * Projeto: Buscar palavras reservadas Java
 */



public class PalavrasReservadas {
	
	String palavras = "abstract assert boolean break byte case catch char class const continue default do double else enum extends false final finally float for goto if implements import instanceof int interface long native new null package private protected public return short static strictfp super switch synchronized this throw throws transient true try void volatile while";
}
e por ultimo o teste TestePalavras
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.*;


public class TestePalavras {

	public void testePalavras(String entrada_palavra) throws IOException
	{
		//String palavras_encontradas = null;
		String local = null;
		String linha = null;
		//PalavrasReservadas palavra = new PalavrasReservadas();

		local = JOptionPane.showInputDialog(null,"Digite Local Arquivo: ");

		//Guardando arquivo em diretorio
		String separa_palavra[] = entrada_palavra.split("\ ");
		
		BufferedReader arquivo = new BufferedReader(new FileReader(local));
		linha = arquivo.readLine();
		String separa_palavra_texto[] = linha.split("\ ");
		
		
		while((linha = arquivo.readLine()) != null )
		{
			for(int i = 0; i < separa_palavra.length; i++){
				for (int j = 0; j < separa_palavra_texto.length ; j++){
					if(separa_palavra_texto[j].equals(separa_palavra[i])){
						JOptionPane.showMessageDialog(null,"Palavra encontrada: "+separa_palavra[i]);
						break;
					}
				}
			}
		}

	}
}

Enfim.. o loop esta com algum erro que nao testa o arquivo inteiro...

Obrigado.oi

6 Respostas

Adelar

Olá,
não executei seu programa, mas algumas coisas que vi:

apague a linha 24:

linha = arquivo.readLine();

e coloque a linha 25 depois da linha 29:

String separa_palavra_texto[] = linha.split("\ ");

Isto porque você já está lendo linha a linha no while, e o split deve ser feito a cada linha lida.

Att.

gilmar_soares

Obrigado,

ele continua não encontrando todas as palavra
por ex testei em um arquvo que tinha o “try”
Mesmo assim Obrigado pela dica!!!

Adelar

Olá,
dependendo do caractere que vier antes ou depois da palavra a ser reconhecida pode ser que não dê certo. Isto por que o split só vai considerar o espaço para separar as strings, e se houver um tab por exemplo (antes ou depois do “try”) não vai achar.

att.

gilmar_soares

E como fazer pra ele tratar… certinho esse tipo de arquivo
e encontrar as palavras corretamente?
Abs

Adelar

olá,
pode ser assim:
logo após fazer o split da string para cada uma das palavras verifica se finaliza ou inicia com tab, caso sim atualiza a string retirando o(s) tab(s) (isso antes da linha 30 do TestePalavras). Somente depois deste processamento que vai executar os dois for que iniciam na linha 30.

boa sorte :slight_smile:
Att.

gilmar_soares

Boa Tarde a todos…

Eu consegui resolver o programa… ficou dessa forma!!!

Obrigado pela atenção de TODOS!!!

Principal

/*
 * Nome: Gilmar Soares
 * Data: 20/03
 * Projeto: Buscar palavras reservadas Java
 */

import java.io.FileNotFoundException;
import java.io.IOException;

public class Principal {
	
	public static void main(String args[]) throws IOException
	{
		PalavrasReservadas palavra_reservada = new PalavrasReservadas();
		TestePalavras palavra = new TestePalavras();
		palavra.testePalavras(palavra_reservada.palavras);
		
	}

}

PalavrasReservadas

/*
 * Nome: Gilmar Soares
 * Data: 20/03
 * Projeto: Buscar palavras reservadas Java
 */



public class PalavrasReservadas {
	
	String palavras = "abstract assert boolean break byte case catch char class const continue default do double else enum extends false final finally float for goto if implements import instanceof int interface long native new null package private protected public return short static strictfp super switch synchronized this throw throws transient true try void volatile while";
}

TestePalavras

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.*;


public class TestePalavras {

	public void testePalavras(String entrada_palavra) throws IOException
	{
		//String palavras_encontradas = null;
		String local = "";
		String linha = "";
		//PalavrasReservadas palavra = new PalavrasReservadas();

		local = JOptionPane.showInputDialog(null, "Digite Local Arquivo: ");

		//Guardando arquivo em diretorio
		String separa_palavra[] = entrada_palavra.split("\ ");
		
		BufferedReader arquivo = new BufferedReader(new FileReader(local));
		//linha = arquivo.readLine();
		
		while (arquivo.ready())
		{
			linha = arquivo.readLine();
			// Substitui todas as tabulações por espaço para split correto
			linha = linha.replaceAll("\t"," ");
			String separa_palavra_texto[] = linha.split("\ ");
			
			System.out.println(linha);
			for (int i = 0; i < separa_palavra_texto.length; i++)
				System.out.println(separa_palavra_texto[i]);
			
			for (int i = 0; i < separa_palavra_texto.length; i++) {
				for (int j = 0; j < separa_palavra.length ; j++) {
					if (separa_palavra_texto[i].equals(separa_palavra[j])) {
						JOptionPane.showMessageDialog(null, "Palavra encontrada: " + separa_palavra[j]);
					}
				}
			}
			JOptionPane.showMessageDialog(null, "O arquivo terminou \ne as palavras descritas\n foram encontradas no arquivo.");
		}

	}
}

Utilizei o linha.repleceAll("\t"," ");

Assim esse \t seria a tabulação sera tratada como espaço!!!

Mas uma vez Obrigado pelo pronto atendimento que todos me deram!!!

Sou novo aqui mas vou ajudar da forma que puder!

ABS

Criado 20 de março de 2010
Ultima resposta 24 de mar. de 2010
Respostas 6
Participantes 2