Buscando uma palavra

9 respostas
lina

Oi,
Bom dia..

Estou com uma duvida em meu código, estou fazendo uma "pesquisa" ou busca de palavras,
dentro do meu JTextArea. onde eu pego o que o usuario digitou (No caso dentro de um TextField) e
quando clico no botão ele faz seu evento, procura se encontrou dentro do JTextArea a palavra e pinta
a mesma.

Problema: Estou conseguindo fazer isso, porem só com palavras do tipo: teste ou palavras (palavras inteiras)
se eu colocar apaenas um caracter no JTextField, ou seja, um 'a' e no meu JtextArea colocar a string: "bcdfga"
ele não está encontrando o 'a' no final da String.. ou seja, só está conseguindo buscar a palavra inteira.

Duvida: Estou utilizando o indexOf, ele realmente é bom para fazer esse tipo de pesquisa?

Dados: io_tf_case (meu JTextField), io_pad_writer.io_ta_codigo (meu JtextArea)

Meu código:

//
// Recebe o conteudo.			 
//
int
ln			=	io_tf_case.getText().indexOf(io_pad_writer.io_ta_codigo.getText());
			
//
// Se palavras iguais, busca...
//			
if	(				
		ln			>=	0
	)
{
	//
	// Pega a posição inicial..
	//
	io_pad_writer.io_ta_codigo.setSelectionStart(ln);
				
	//
	// Pega a posição final..
	//
	io_pad_writer.io_ta_codigo.setSelectionEnd(ln+io_tf_case.getText().length());
				
	//
	// Pinta a palavra de acordo com a cor escolhida.
	//
	io_pad_writer.io_ta_codigo.setSelectionColor(Color.CYAN);
}

Seria isso,
Tchauzin.

9 Respostas

cv1

Certeza que ln+io_tf_case.getText().length() faz o que vc quer?

PS: http://java.sun.com/docs/codeconv/

edwins

Olá, eu acho que a utilização de expressões regulares seria a melhor forma de resolver o seu problema. Você pode dar uma olhada em um artigo do próprio guj referente ao assunto.

http://www.guj.com.br/java.tutorial.artigo.1.1.guj

Regards.

Mantu

Fiz esse programinha de exemplo pra tirar dúvida de um GUJNauta há muito tempo atrás. Acho que pode ser útil para a sua dúvida (Tem um botãozinho que faz uma pesquisa rudimentar de texto).
Divirta-se

ViniGodoy

Melhor do que expressões regulares, seria usar o antlr.

Já deu uma olhada nesse editor aqui? Foi programado por um colega meu do trabalho e é open source. O código está bem claro e usa antlr.
http://www.guj.com.br/posts/list/48736.java

Mantu

ViniGodoy:
Melhor do que expressões regulares, seria usar o antlr.

Será? Porque o ANTLR é um gerador de parser. Não vejo muito sentido em utilizar um gerador de parser para fazer busca em texto. A menos que o texto a ser procurado obedeça a alguma gramática formal. O ANTLR é utilizado mais para o propósito de criar parser. Eu estou utilizando o ANTLR no momento para desenvolver um parser que traduza código Java para código C#, e posso dizer que o uso do ANTLR é um tanto quanto trabalhoso. O ANTLR recebe como entrada uma determinada gramática (que deve ser escrita em uma linguagem própria do ANTLR, mas muito intuitiva para quem já fez alguma disciplina sobre compiladores na faculdade) e sua saída é um parser escrito em Java que “valida” textos que obedeçam aquela gramática de entrada. Este parser, basicamente, recebe um stream de texto para ser analisado. Se o programa terminar sua execução sem lançar nenhuma exceção, que dizer que o texto entrado está de acordo com a gramática que deu origem ao parser. Caso contrário, a exceção lançada vai te indicar onde que o texto entrado está em desacordo com a gramática.
Isso é só a ponta do iceberg… O ANTLR vai muito mais além, com geração de árvores de análise sintática, TreeParser (utilizados para fazer tradução de código), e por aí vai. Não consigo ver como comparar o uso de regex com o uso do ANTLR. Acho que não é o caso…
[EDIT]
À propósito:
http://www.antlr.org/

cv1

Antlr pra fazer busca em area de texto? Ta louco?

ViniGodoy

É Mantu, você tenha razão.

Acho que me concentrei demais na questão de pintar as palavras e não no problema central. hehehehe

ViniGodoy

Ops, ops! Retiro o que disse!!!

heheheheheehe…

antlr é pra parsing.

Acho melhor eu ir dormir mais cedo no domingo! :slight_smile:

lina

Oi,
Muito obrigado pelas dicas.
Tópico Resolvido… Utilizei as formas passadas pelo Mantu, porem analizei as outras respostas
e achei muito interessante. posso utilizalas em um uso futuro.

Tchauzin.

Criado 15 de janeiro de 2007
Ultima resposta 15 de jan. de 2007
Respostas 9
Participantes 5