Como fazer um FOR para identificar cada palavra da frase?
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
Curtidas 0
Respostas
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
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
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
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
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
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
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
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
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
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...
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 (?)
[[]]
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
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
19/09/2011
[quote="diegoalves"]Eu faria assim,
simples e claro.
[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.
...
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
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
19/09/2011
meu código tah dessa forma!LEMBRANDO INFORMAR QUE NÃO POSSO USAR O MÉTODO SPLIT!
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!
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++;
}
}
}
GOSTEI 0
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