[Não resolvido] Pegar palavra (string) que está definida em uma posição (int) e comparar

4 respostas
H

Pessoal, estou estudando como manipular strings e arrays e preciso de um help para entender o que estou fazendo.

Eu tenho uma frase com palavras classificadas, por exemplo: "Estou_A estudando_B manipulacao_C de_A strings_D em_T java_Z "

Extraio todos os "_A", todos os "_B", etc. (isso já consegui)

Pego a posição de cada "_A" ou "_B" para depois poder comparar.
é ai que eu não consigo. Quero dizer por exemplo:
Se "estudando_B" estiver próximo de "manipulacao_C"

então imprima "estudando_B", por exemplo.

A saída atual que estou recebendo é essa:

Frase
[estou_N procurando_PREP uma_N palavra_PREP por_N tags_ADJ em_ADJ uma_N frase_ADJ]

Procurando todos os nomes
Existe um _N na posição: 7, a palavra junto ao _N é: estou_N
Existe um _N na posição: 29, a palavra junto ao _N é: uma_N
Existe um _N na posição: 48, a palavra junto ao _N é: por_N
Existe um _N na posição: 70, a palavra junto ao _N é: uma_N

Procurando todos os adjetivos
Existe um _ADJ na posição: 57, a palavra junto ao _ADJ é: tags_ADJ
Existe um _ADJ na posição: 64, a palavra junto ao _ADJ é: em_ADJ
Existe um _ADJ na posição: 80, a palavra junto ao _ADJ é: frase_ADJ

Encontrou um: 81 (aqui é o problema, não consigo imprimir a palavra que está na posição 81. esta posição ainda é duvidosa, creio que o algoritmo não seja esse)
a saída deveria ser um número menor, exemplo: 80 (do último _ADJ impresso) - 70 (do último _N impresso) da 10.

testes.Calcs@19821f

A seguir segue o cod:

package testes;

import java.util.ArrayList;

public class Calcs {

	public Calcs() {

		System.out.println("Frase");
		ArrayList<Object> listaN = new ArrayList<Object>();
		listaN
				.add("estou_N procurando_PREP uma_N palavra_PREP por_N tags_ADJ em_ADJ uma_N frase_ADJ");
		System.out.println(listaN + "\n");

		String[] recebe_lista = ((String) listaN.get(0)).split(" ");

		int posicao = 0;

		System.out.println("Procurando todos os nomes");
		for (String nova_lista : recebe_lista) {
			posicao += nova_lista.length() + 1;
			if (nova_lista.substring(nova_lista.length() - 2).equalsIgnoreCase(
					"_N")) {
				System.out.println("Existe um _N na posição: " + (posicao - 1)
						+ ", a palavra junto ao _N é: " + nova_lista);
			}
		
		}

		int posicaoADJ = 0;
		System.out.print("\n");
		System.out.println("Procurando todos os adjetivos");
		for (String nova_listaADJ : recebe_lista) {
			posicaoADJ += nova_listaADJ.length() + 1;
			if (nova_listaADJ.substring(nova_listaADJ.length() - 4)
					.equalsIgnoreCase("_ADJ")) {
				System.out.println("Existe um _ADJ na posição: "
						+ (posicaoADJ - 1) + ", a palavra junto ao _ADJ é: "
						+ nova_listaADJ);
			}

		}
                // >>>>>>>>>>>> AQUI É O PROBLEMA <<<<<<<<<<<<
                // não consegui imprimir a palavra da posição.
		// Aqui era para verificar se o nome está próximo de um adjetivo e se
		// estiver quero imprimir a palavra e a posição -- PROVAVEL QUE ESSE LAÇO ESTEJA ERRADO e eu não tenha idéia de como fazer

		if (posicao - posicaoADJ < 100) {
			System.out.print("\nEncontrou um: " + posicao + "\n");
		}
		

		
	}
}

alguém poderia ajudar nessa confusão?
Obrigado.

abraços

4 Respostas

H

[color=red]Poderia ser feito assim, mas dá um erro e não consigo utilizar. (mesmo deixando as variáveis como globais).[/color]

if (nova_lista.contains("_N") && nova_listaADJ.contains("_ADJ")){
			
			int posAux;
			posAux = pos - posicao;
			
			for (String lista_final : recebe_listaADJ) {
				posAux += lista_final.length()+1;
			
			if (posAux < 10){
				System.out.print("\n\nExiste na frase um _N próximo a um _ADJ " + lista_final + " na posição: "+ posAux + "\n" );
			}
			
			}
		
		}
H

Último código em questão. o Java não dá erro quando programo, mas aparece depois um java.lang.NullPointerException bem na linha 75:

"if (nova_lista.contains("_N") && nova_listaADJ.contains("_ADJ"))"

package testes;

import java.util.ArrayList;


public class Calcs {

	
	
	// Declaração de Variáveis
	ArrayList<Object> listaN;
	String[] recebe_lista;
	String nova_lista;
	String nova_listaADJ;
	
	int posicao = 0;
	int pos = 0;
	
	
	Calcs() {

		// Armazenar todos os _N em uma lista
		listaN = new ArrayList<Object>();
		
		// Frase a ser analisada
		listaN.add("teste_F um_O array_P list_N para_T ser_ADJ testado_ADJ anaba_N sajias_O");

		// Buscar os _N
		recebe_lista = ((String) listaN.get(0)).split(" ");

		// Monta um novo array para receber possíveis _N e suas posições
		for (String nova_lista : recebe_lista) {
			posicao += nova_lista.length() + 1;

			// Verifica na lista o _N
			if (nova_lista.substring(nova_lista.length() - 2).equalsIgnoreCase(
					"_N")) {

				// Imprime _N
				System.out
						.print("[PRIMEIRO LAÇO]Encontrado _N na posição: "
								+ (posicao - 1)
								+ " ------------> "
								+ nova_lista);
				System.out.print("\n\n");

			}
		}

		// Se tiver algum _N, buscar possíveis _ADJ

		String[] recebe_listaADJ = ((String) listaN.get(0)).split(" ");

		

		// Monta um novo array para receber possíveis _ADJ e suas posições
		for (String nova_listaADJ : recebe_listaADJ) {
			pos += nova_listaADJ.length() + 1;

			// Verifica se na lista inicial existe _ADJ
			if (nova_listaADJ.substring(nova_listaADJ.length() - 4)
					.equalsIgnoreCase("_ADJ")) {
				System.out
						.print("[SEGUNDO LAÇO]Encontrado _ADJ na posição: "
								+ (pos - 1)
								+ " ------------> "
								+ nova_listaADJ);
				System.out.print("\n\n");

			}

		}

		// Compara a posição do _N e do _ADJ para ver se está próximo, o que caracteriza possivelmente um diagnóstico 
		if ((nova_lista.contains("_N")) && (nova_listaADJ.contains("_ADJ"))){
			
			int posAux;
			posAux = pos - posicao;
			
			for (String lista_final : recebe_listaADJ) {
				posAux += lista_final.length()+1;
			
			if (posAux < 10){
				System.out.print("\n\nExiste na frase um _N próximo a um _ADJ " + lista_final + " na posição: "+ posAux + "\n" );
			}
			
			}
		
		}
	}
}
braian
hugoramone:
Último código em questão. o Java não dá erro quando programo, mas aparece depois um java.lang.NullPointerException bem na linha 75:

"if (nova_lista.contains("_N") && nova_listaADJ.contains("_ADJ"))"

package testes;

import java.util.ArrayList;


public class Calcs {

	
	
	// Declaração de Variáveis
	ArrayList<Object> listaN;
	String[] recebe_lista;
	String nova_lista;
	String nova_listaADJ;
	
	int posicao = 0;
	int pos = 0;
	
	
	Calcs() {

		// Armazenar todos os _N em uma lista
		listaN = new ArrayList<Object>();
		
		// Frase a ser analisada
		listaN.add("teste_F um_O array_P list_N para_T ser_ADJ testado_ADJ anaba_N sajias_O");

		// Buscar os _N
		recebe_lista = ((String) listaN.get(0)).split(" ");

		// Monta um novo array para receber possíveis _N e suas posições
		for (String nova_lista : recebe_lista) {
			posicao += nova_lista.length() + 1;

			// Verifica na lista o _N
			if (nova_lista.substring(nova_lista.length() - 2).equalsIgnoreCase(
					"_N")) {

				// Imprime _N
				System.out
						.print("[PRIMEIRO LAÇO]Encontrado _N na posição: "
								+ (posicao - 1)
								+ " ------------> "
								+ nova_lista);
				System.out.print("\n\n");

			}
		}

		// Se tiver algum _N, buscar possíveis _ADJ

		String[] recebe_listaADJ = ((String) listaN.get(0)).split(" ");

		

		// Monta um novo array para receber possíveis _ADJ e suas posições
		for (String nova_listaADJ : recebe_listaADJ) {
			pos += nova_listaADJ.length() + 1;

			// Verifica se na lista inicial existe _ADJ
			if (nova_listaADJ.substring(nova_listaADJ.length() - 4)
					.equalsIgnoreCase("_ADJ")) {
				System.out
						.print("[SEGUNDO LAÇO]Encontrado _ADJ na posição: "
								+ (pos - 1)
								+ " ------------> "
								+ nova_listaADJ);
				System.out.print("\n\n");

			}

		}

		// Compara a posição do _N e do _ADJ para ver se está próximo, o que caracteriza possivelmente um diagnóstico 
		if ((nova_lista.contains("_N")) && (nova_listaADJ.contains("_ADJ"))){
			
			int posAux;
			posAux = pos - posicao;
			
			for (String lista_final : recebe_listaADJ) {
				posAux += lista_final.length()+1;
			
			if (posAux < 10){
				System.out.print("\n\nExiste na frase um _N próximo a um _ADJ " + lista_final + " na posição: "+ posAux + "\n" );
			}
			
			}
		
		}
	}
}

nova_lista e nova_listaADJ estão NULOS!!!

H

posso mudar para recebe_lista, mas não funcionará, foi só um exemplo

Criado 12 de maio de 2010
Ultima resposta 12 de mai. de 2010
Respostas 4
Participantes 2