[Nova Dúvida] Manipulação de Strings - Calcular distância de duas strings e comparar seus radicais"

Pessoal… a Lina já resolveu um primeiro problema e me ajudou a entender um pouco de como manipular strings… o primeiro caso era saber a posição de uma string dentro de um array e imprimir seu conteúd (post da Lina abaixo mostra como para quem está procurando isso)

agora me encontro em outro desafio, que segue a seguir:

estou tentando comparar dois radicais em uma frase , exemplo:

eu_A estou_N comparando_ADJ frases_B em_A programação_D java_E

no caso eu estou no momento encontrando o “n” e o “adj”… estou tentando pegar a posição dos dois para dizer que se existe um _N e logo em seguida um _ADJ, entao imprima a palavra que vem junto do _N , no caso o “estou”. segue a tentiva:

[code]package calculos;

import java.util.ArrayList;

public class Corpus {

Corpus() {

	// Armazenar todos os _N em uma lista
	ArrayList<Object> listaN = new ArrayList<Object>();
	listaN
			.add("teste_N um_O array_P list_N para_ADJ ser_N testado_ADJ anaba_AF sajias_N");

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

	int posicao = 0;

	// 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("[PASSOU NO PRIMEIRO LAÇO]Existe um _N na posição: "
							+ (posicao - 1)
							+ ", a palavra junto ao _N é: "
							+ nova_lista);
			System.out.print("\n\n");

		}
	}

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

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

	int pos = 0;

	// 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("[PASSOU NO SEGUNDO LAÇO]Existe um _ADJ na posição: "
							+ (pos - 1)
							+ ", a palavra junto ao _ADJ é: "
							+ nova_listaADJ);
			System.out.print("\n\n");

		}

	}

[color=red]
aqui da um erro porque não posso chamar as duas listas fora do FOR… mas era uma idéia de como poderia ser feito[/color]

	// 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" );
		}
		
		}
	
	}
}

}
[/code]

alguém tem alguma idéia?

abraços

Oi,

Opção de número 1:

[code]// Armazenar todos os _N em uma lista
ArrayList listaN = new ArrayList();
listaN.add(“teste_N um_O array_P list_N para_I extrair_O valores_U”);

	String[]
	recebe_lista		=	((String)listaN.get(0)).split(" ");
	
	int
	posicao = 0;
	
	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);
		}			
	}[/code]

Opção 2 (Só mostra a posição… foi feito na “UNHA”):

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

	char
	entrada_atual;
	
	int
	posicao			=	0;
	
	String
	cata_palavra		=	"";
	
	while (posicao < recebe_lista.length()) {
		entrada_atual	=	recebe_lista.charAt(posicao);
		
		if (entrada_atual == '_') {
			
			if (recebe_lista.charAt(posicao+1) == 'N') {
				System.out.println("Existe um _N na posição: "+posicao); // Ou posição + 1;
				posicao++;
				continue;
			}
		}
		
		posicao++;
	}[/code]

Tchauzin!

Lina, muito obrigado!

estou me batendo um pouco p/ aprender manipular strings em java…
mas vou continuar na batalha!

[quote=hugoramone]Lina, muito obrigado!

estou me batendo um pouco p/ aprender manipular strings em java…
mas vou continuar na batalha![/quote]

Oi,

Tudo bem! Continue postando, a melhor maneira de aprender (Alem de fazer exercícios), é o fórum.

Só evite duplicar o post, ok?!

Tchauzin!