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

3 respostas
H

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:

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

alguém tem alguma idéia?

abraços

3 Respostas

lina

Oi,

Opção de número 1:

// Armazenar todos os _N em uma lista
		ArrayList<Object> listaN = new ArrayList<Object>();
		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);
			}			
		}

Opção 2 (Só mostra a posição.. foi feito na "UNHA"):

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++;
		}

Tchauzin!

H

Lina, muito obrigado!

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

lina

hugoramone:
Lina, muito obrigado!

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

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!

Criado 10 de fevereiro de 2010
Ultima resposta 10 de fev. de 2010
Respostas 3
Participantes 2