• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

javanoob

Strings e Strings

8 mensagens neste tópico

Boas!

Alguém que possa dar-me sugestões para como procurar strings dentro de strings?

Mas nada de muito complexo sff!  ;)

Pois como o meu nick indica ainda sou um noob nisto do Java, só recentemente comecei a estudar Java na Universidade!  ;)

Obrigado!

ps. Primeiro post aqui no burgo!

ps2. Um dia hei-de saber tanto como vocês!  :ipool:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tipo isto?

	public class Strings
{
	static String[] strings = { "k", "w", "y" };

	static String string;

		public static void main(String[] args) 
		{

			string = args[0];			

			// ciclo para procurar no array de strings
			for(int i=0; i<strings.length; i++)
			{

				// if que verifica se existe uma string
				if(string.contains(strings[i])) {
					System.out.println("encontrado"); }
				else {
					System.out.println("não encontrado"); }

			}

		}

}

Pelo output que isto faz, fico a pensar que vou ter que usar outro ciclo, porque o que este faz é procurar todas as ocorrências do array na string... e eu queria que o gaijo parasse na primeira!  :hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou aqui com uma pequena dificuldade..

O que o código de cima esta fazer é enviar "encontrado" quando encontra a letra e "não encontrado" quando não encontra a letra, o problema é que ele faz isto para todas as posições do array mesmo quando uma das condições já foi estabelecida.

Ou seja, por exemplo, quando a letra procurada é a primeira posição do array faz "encontrado" e para o resto do array faz "não encontrado", já quando a letra a procurar esta na ultima posição do array faz "não encontrado" até há última posição do array onde nesse caso faz "encontrado".

Sugestões?  :hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É o que disse acima mete um break no if do encontrado.

if(string.contains(strings[i])) {
    System.out.println("encontrado"); 
    break;
}

Se quiseres que ele só mostre se encontra algum ou nenhum faz algo tipo

public static boolean procura(String [] procurar, String fonte){
    for(String s : procurar){
        if( fonte.contains(s) ){
            return true;
        }
    }
    return false;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou seja, por exemplo, quando a letra procurada é a primeira posição do array faz "encontrado" e para o resto do array faz "não encontrado", já quando a letra a procurar esta na ultima posição do array faz "não encontrado" até há última posição do array onde nesse caso faz "encontrado".

Não é isso que está a acontecer... O que está a acontecer é, se a primeira string pertencer há argumento e mais nenhuma das restantes string pertencer, aparece "encontrado" uma vez e "não encontrado" nas outras.

Mas se passares como argumento a string "kwy", vai aparecer encontrado para todas.

Afinal o que é que pretendes? Saber quais as strings que estão na string argumento, ou se alguma das strings está na string argumento?

Se for o primeiro caso, é o que o programa faz. Se for o segundo, um break não é suficiente, pois continuará a mostrar "não encontrado" para as strings que não encontrar. Neste caso acho que é melhor uma variável que te indique se a string já ocorreu ou não, e quando saíres do ciclo, testas o valor dessa variável (podes também usar essa variável para saber se podes ou não sair do ciclo).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Seguindo as vossas sugestões cheguei a isto:



public class Strings
{

	static String[] s = { 
				"k",
				"w",
				"y"
				};

	static String string;

	static boolean b;

		public static void main(String[] args) 
		{

			string = args[0];			

			b = false;

			for(int i=0; i<s.length; i++)				
				if(string.contains(s[i])) b = true;

			if(b == true) System.out.println("encontrado");
			else System.out.println("não encontrado");

		}

}



Parece funcionar, ainda estou a pensar em formas de o quebrar... agora, será que existe outra forma de fazer isto?

Desde já obrigado pela ajuda!

ps. Como faço para o meu código aparecer colorido como o código postado por vocês?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora