Como fazer um FOR para identificar cada palavra da frase?

Java

19/09/2011

Olá pessoal! Gostaria eu de dizer o seguinte..Estou tentando resolver um problema que é fazer uma função que receba uma string e retorne a que tiver maior número de caracteres! A função já foi feita...Ou seja o método!Mas eu kero fazer c array e gostaria de saber cm eu faço a quetão dos FOR.. Neste caso usarei 3 for...Um para identificar cada palavra dentro do array? Outro para comparar as palavras?e outro para dizer a maior delas! Me ajudem na estrutura do primeito FOR pessoal! Agradecido!
Luan Oliveira

Luan Oliveira

Curtidas 0

Respostas

Douglas Eric

Douglas Eric

19/09/2011

[url=http://download.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)]String.split(regex)[/url] Você não precisa de três for. Um só resolve. Tem duas opções: ou você conta a String inteira, e divide em palavras, procurando pelo caracter espaço ( ' ' ), e depois outro for para contar as letras e descobrir o maior. Para mostrar não precisa de outro for. OU, você pode usar este método (não função) String.split, que te retorna uma matriz de String, e depois contar os caracteres de cada uma, achando o maior.
GOSTEI 0
Douglas Eric

Douglas Eric

19/09/2011

Eu tenho q inicializar o array?Eu não tenho o tamanho dele?Pois eu não sei o tamanho de cada palavra! C eh q faco a estrutura?? Da um toke ae...Q eu pensei em fazer 3 for...Como já te disse!Eskeci de dizer q não posso usar o metodo split naum!
GOSTEI 0
Douglas Eric

Douglas Eric

19/09/2011

se não pode usar o método split "naum", então tem que ser da primeira forma. usando um StringBuilder fica mais fácil. 2 fors: passo a passo 1- Leia a String 2- Inicie um StringBuilder com essa String 3- Identifique onde estão os caracteres de espaço. 4- Conte quantos caracteres entre o inicio e o espaço, Salve a palavra (substring) caso seja maior que a String atual. 5- Apague a substring entre o inicio, e o espaço (inclusive) 6- Repita os passos 3 a 5 até seu StringBuilder ficar vazio depois de ter feito isso, é só imprimir a String que estiver salva no final do loop. Da pra fazer com 2 fors, um dentro do outro Ou um for só se fizer bem feito. Aqui estão uns links pra te ajudar http://download.oracle.com/javase/tutorial/java/data/buffers.html http://download.oracle.com/javase/1.5.0/docs/api/java/lang/StringBuilder.html http://imasters.com.br/artigo/7131/java/entendendo_as_classes_string_stringbuilder_e_stringbuffer/ Dae deixa eu advinhar: Você vai chegar aqui e dizer "mas também não posso usar StringBuilder!!!onze!1!" Nesse caso, use o método String.toCharArray() para pegar uma matriz de caracteres.
GOSTEI 0
Douglas Eric

Douglas Eric

19/09/2011

Só naum posso usar o split! Adivinhou errado!Maasssss...vlw a dica! Vou fazer a estrutura ake cara!Vlw alguma duvida dow o toke! Mesmo assim jah vou logo agradecendo! Falou!! Vamu q vamu!Vou usar 2 for!
GOSTEI 0
Douglas Eric

Douglas Eric

19/09/2011

Assumindo que é para retornar a palavra com o maior número de caracteres (o enunciado diz para retornar a String com o maior número de caracteres?). não deve ser muito difícil fazer só com um for e uma variável para [i]lembrar[/i] o início da atual palavra
maior = ""
inicio = 0
para cada posição do texto
  se a letra não for de palavra
    se posição == inicio
      // ainda não é palavra
      inicio += 1
    caso contrário
      // nova palavra
      se (posição - inicio) > maior.length
        // achou maior
        maior = texto.substring(inicio, posição)
      inicio = i + 1

se (texto.length - inicio) > maior.length
  // última palavra
  maior = texto.substring(inicio)
[[]]
GOSTEI 0
Douglas Eric

Douglas Eric

19/09/2011

O negocio é!Que para começar aki eu tenhoq saber o tamanho do array! E tow brigando aki! q tah mais ou menos assim... public class questao_2 { public static void retornapalavra(String frase){ int quantidadeDePalavras =0; for (int i = 0; i < quantidadeDePalavras; i++) { String [] array = new String[quantidadeDePalavras]; } } public static void main(String[]args){ retornapalavra("Luan Lopes Oliveira"); } }
GOSTEI 0
Luan Oliveira

Luan Oliveira

19/09/2011

[quote="LOPES"]O negocio é!Que para começar aki eu tenhoq saber o tamanho do array! E tow brigando aki! q tah mais ou menos assim... public class questao_2 { [...]
desculpe, mas o meu português não é bom o suficiente para entender o que você escreveu... não estou entendendo mais nada :getout:
GOSTEI 0
Douglas Eric

Douglas Eric

19/09/2011

[quote="simu"] desculpe, mas o meu português não é bom o suficiente para entender o que você escreveu... não estou entendendo mais nada :getout:
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Eu acho que o seu MSNês que não é bom o suficiente simu.
GOSTEI 0
Douglas Eric

Douglas Eric

19/09/2011

Eu tenho que iniciar um contador dentro desse FOR...Para poder saber o tamanho do array!Depois criar outro FOR para identificar as palavras e comparar a quantidade de letra das palavras??? Meu código está assim:Só de começo...
public class questao_2 {
public static void retornapalavra(String frase){
int quantidadeDePalavras =0;
for (int i = 0; i < quantidadeDePalavras; i++) {

String [] array = new String[quantidadeDePalavras];

}
}

public static void main(String[]args){
retornapalavra("Luan Lopes Oliveira");
}
}
GOSTEI 0
Luan Oliveira

Luan Oliveira

19/09/2011

[quote="LOPES"]Eu tenho que iniciar um contador dentro desse FOR...Para poder saber o tamanho do array!Depois criar outro FOR para identificar as palavras e comparar a quantidade de letra das palavras??? Meu código está assim:Só de começo...
public class questao_2 {
public static void retornapalavra(String frase){
int quantidadeDePalavras =0;
for (int i = 0; i < quantidadeDePalavras; i++) {

String [] array = new String[quantidadeDePalavras];

}
}

public static void main(String[]args){
retornapalavra("Luan Lopes Oliveira");
}
}
não tá nem um pouco parecido com o que eu postei, mas isso só assumindo que é para achar a palavra mais longa (palavrão?). Se for para fazer outra coisa, como por exemplo calcular o número de palavras, ai é outra coisa mesmo (?) [[]]
GOSTEI 0
Diego Silva

Diego Silva

19/09/2011

Eu faria assim, simples e claro.
public class ContaPalavras {

	public static void main(String[] args) {
		
		String frase = "Diego é o rei do FIFA11 no PS3";
		
		String[] palavras = frase.split(" "); //cria array com palavra da frase
		
		String maiorPalavra = "";
		for (String palavra : palavras) {
			if (palavra.length() > maiorPalavra.length()) { //se palavra atual é maior que a última maior palavra?
				maiorPalavra = palavra;
			}
		}
		
		System.out.println("qtd de palavras = "+ palavras.length);
		System.out.println("Maior   palavra = "+ maiorPalavra);
	}
	
}
GOSTEI 0
Luan Oliveira

Luan Oliveira

19/09/2011

[quote="diegoalves"]Eu faria assim, simples e claro.
public class ContaPalavras {

	public static void main(String[] args) {
		
		String frase = "Diego é o rei do FIFA11 no PS3";
		
		String[] palavras = frase.split(" "); //cria array com palavra da frase
		
		String maiorPalavra = "";
		for (String palavra : palavras) {
			if (palavra.length() > maiorPalavra.length()) { //se palavra atual é maior que a última maior palavra?
				maiorPalavra = palavra;
			}
		}
		
		System.out.println("qtd de palavras = "+ palavras.length);
		System.out.println("Maior   palavra = "+ maiorPalavra);
	}
	
}
[i]Cade o botão de downvote?[/i] [:-[b][/b]) eu também faria (quase) desse jeito, só que: [quote="na primeira resposta do tópico, sekkuar escreveu"][url=http://download.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)]String.split(regex)[/url] Você não precisa de três for. ...
em seguida[quote="LOPES escreveu"]... Eskeci de dizer q não posso usar o metodo split naum! e em outra mensagem[quote="LOPES também escreveu"]Só naum posso usar o split! ... além disso do jeito que fez, o split também considera como tendo uma palavra entre dois espaços em branco consecutivos. [[]]
GOSTEI 0
Douglas Eric

Douglas Eric

19/09/2011

[quote="diegoalves"]Eu faria assim, simples e claro.
[img]http://imagem.ongame.com.br/aika/blog/facepalm.jpg[/img]
GOSTEI 0
Douglas Eric

Douglas Eric

19/09/2011

meu código tah dessa forma!LEMBRANDO INFORMAR QUE NÃO POSSO USAR O MÉTODO SPLIT!
public class questao2_1 {  
      public static void retornapalavra(String frase){  
         int tamanhoDafrase = frase.length();  
         int comecoDaPalavra = 0;//INICIALIZAÇÃO DA VARIÁVEL DO COMECO DA PALAVRA  
         int finalDaPalavra = 0;//INICIALIZAÇÃO DA VARIÁVEL DO FINAL DA PALAVRA  
         int quantidadeDePalavras = 0;  
         for (int i = 0; i < tamanhoDafrase; i++) {  
            char letra = frase.charAt(i);  
            if( letra == ' ' ){  
               String palavra = frase.substring(comecoDaPalavra, finalDaPalavra);  
               System.out.print(palavra);  
               comecoDaPalavra = finalDaPalavra+1;  
               finalDaPalavra++;  
            } else if( i == tamanhoDafrase-1 ){  
               finalDaPalavra++;  
               String palavra = frase.substring(comecoDaPalavra, finalDaPalavra);  
               System.out.print(palavra);  
            } else {  
               finalDaPalavra++;  
            }  
         }  
      }  
Ele jah percorre todas as posições!Blxinha...agora tenhu umas dúvidas!Tenhu agora q guardar num array? E kero fazer as comparações,pois é preciso para saber a maior...Alguma idéia? Alguem pode me ajudar? Agradecerei!
GOSTEI 0
Diego Silva

Diego Silva

19/09/2011

Eae LOPES beleza? então para te ajudar fiz dessa outra forma. coloquei alguns comentários, pois não sei o seu nível de programação mais qualquer coisa é só remover confere ai, um abraço flw
import java.util.Arrays;


public class Frases {

	public static String[] palavrasDaFrase(String frase) {
		String[] palavras = new String[1]; //inicia array com 1 posição
		
		while (frase != null) {
			frase = frase.replaceAll(" +", " ")  //elimina 2 ou mais espaços em brancos entre as palavras se houver
						 .replaceAll("^ +", ""); //elimina o espaço em branco no inicio da palavra se houver
			
			int ultimoIndicePalavra = frase.indexOf(' '); //identifica o último indice da palavra na frase
			
			if (ultimoIndicePalavra != -1) {
				palavras[palavras.length-1] = frase.substring(0, ultimoIndicePalavra); //recorta a palavra identificada e associa na posição do array
				frase = frase.substring(ultimoIndicePalavra); //elimina a palavra recortada da frase em analise
				palavras = Arrays.copyOf(palavras, palavras.length+1); //faz cópia do array para um outro novo com 1 posição a mais
				continue;// faz outra iteração excluindo o código abaixo
			}
			
			 //se chegar aqui é porque é a última palavra da frase
			palavras[palavras.length-1] = frase.substring(0); //recorta a palavra do inicio ao fim e associa na posição do array
			frase = null; //acabou a analise, torna null para sair do while
		}
		return palavras;
	}

	public static void main(String[] args) {
		String[] palavras = Frases.palavrasDaFrase("Diego é o rei do FIFA no PS3");
		
		String maiorPalavra = "";
		for (String palavra : palavras) {
			if (palavra.length() > maiorPalavra.length()) //se palavra for maior que a maiorPalavra, no inicio a maior palavra é vazia
				maiorPalavra = palavra;
		}
		System.out.println("Quantidade de palavras = "+palavras.length);
		System.out.println("Maior palavra = "+maiorPalavra);
	}
}
GOSTEI 0
POSTAR