RESOLVIDO - metodos charAt() . lenght() e Split() (além de outros) da classe String

[quote=rafaelczy][code]
String palavra = “abc def ghi”;
String[] palavras = palavra.split(" ");

for (int i = palavra.length()-1; i==0; i-- ){
System.out.println(palavras[i]);
}
[/code]

tentei assim mas nao imprime nada

e assim

for (int i = palavra.length()-1; i>=0; i-- ){  
	        System.out.println(palavras[i]);
}

da IndexOutOfBoundException

ufsss…[/quote]

Queridão, na sua segunda tentativa você só errou por falta de atenção.

Você pegou o comprimento da String palavra, por isso está dando erro… palavra tem comprimento igual a 11 e quando vai imprimir, vc tenta acessar o Array palavra[color=red]s[/color] que não possui o indice 11-1. Fora dos limites do array…

Abraço!

VingDel, eu nao falei mas eu percebi esse erro e arrumei mas mesmo assim da IndexOutOfBoundException: 3

for (int i = palavras.length; i>=0; i-- ){  
	        System.out.printf(palavras[i], " ");    
	    }

aqui me referio a palavras[] como podes ver

String palavra = "abc def ghi";  
	    String[] palavras = palavra.split(" ");  
	    
	    for (int i = palavras.length; i==0; i-- ){  
	        System.out.printf(palavras[i], " ");

e assim nao imprime nada

[quote=rafaelczy]VingDel, eu nao falei mas eu percebi esse erro e arrumei mas mesmo assim da IndexOutOfBoundException: 3

for (int i = palavras.length; i>=0; i-- ){  
	        System.out.printf(palavras[i], " ");    
	    }

aqui me referio a palavras[] como podes ver[/quote]

Sim, perfeito, você acertou uma coisa e tirou uma coisa que estava certo.

O indices de um array vão de 0 a length-1… Você só precisava colocar o “s”, porém mexeu em mais coisa… Repare bem.

EDIT: Outro detalhe, o printf não me parece correto. O certo para printf seria printf("%s ", palavras[i]);

Poderia ser também print(palavras[i]+" ");

Abraço!

[code]String word = “abc def ghi”;
String[] words = word.split(" ");

	for (String value : words) {
		System.out.println(value);
	}
	
	System.out.println("###### com [ ]+ ####");
	
	words = word.split("[ ]+");
	for(String value : words) {
		System.out.println(value);
	}[/code]

[quote=nel][code]String word = “abc def ghi”;
String[] words = word.split(" ");

	for (String value : words) {
		System.out.println(value);
	}
	
	System.out.println("###### com [ ]+ ####");
	
	words = word.split("[ ]+");
	for(String value : words) {
		System.out.println(value);
	}[/code][/quote]

Não não, nel, ele quer as palavras da frase do fim pro início.

Tem como fazer com foreach?

Abraço!

acho que não… o foreach até onde eu sei itera a lista do começo pro fim, posso estar errado.

Mas to saindo do foco do tópico hehehe…

Conseguiu imprimir suas strings aí rafaelczy?

bah galera
desde 9hs da mnha estudando
parei pra almoçar
grato epla ajuda
de noite vou implementar o que vcs disseram

Seria algo como isso ?

String word = "abc def ghi"; String[] words = word.split("[ ]+"); Arrays.sort(words, Collections.reverseOrder()); for(String value : words) { System.out.println(value); }

Imprimiu:

ghi def abc

Senão for assim, qual deveria ser o resultado apresentado em tela?

[quote=nel]Seria algo como isso ?

String word = "abc def ghi"; String[] words = word.split("[ ]+"); Arrays.sort(words, Collections.reverseOrder()); for(String value : words) { System.out.println(value); }

Imprimiu:

ghi def abc

Senão for assim, qual deveria ser o resultado apresentado em tela?[/quote]

Até onde eu entendi é isso aí mesmo hehehehe… mas acho que a idéia era ele conseguir fazer isso sozinho,
talvez sem o uso de Collections hehehe, eu lembro que fiz isso aí quando estudava a apostila da Caelum.

Pastei um pouco por não ter uma lógica muito boa na época, mas cheguei la hehe.

[quote=nel]Seria algo como isso ?

String word = "abc def ghi"; String[] words = word.split("[ ]+"); Arrays.sort(words, Collections.reverseOrder()); for(String value : words) { System.out.println(value); }

Imprimiu:

ghi def abc

Senão for assim, qual deveria ser o resultado apresentado em tela?[/quote]

Olá, nel!

Legal sua solução para o foreach, mas, apesar de o resultado ser o mesmo, essa seria uma solução melhor que um simples for decrementando os indices, a nível de desempenho?
Além disso o rafael_czy está iniciando e acho que ele não chegou nesses conceitos de manipulação de um Array.

Abraço!

[quote=digaoneves][quote=nel]Seria algo como isso ?

String word = "abc def ghi"; String[] words = word.split("[ ]+"); Arrays.sort(words, Collections.reverseOrder()); for(String value : words) { System.out.println(value); }

Imprimiu:

ghi def abc

Senão for assim, qual deveria ser o resultado apresentado em tela?[/quote]

Até onde eu entendi é isso aí mesmo hehehehe… mas acho que a idéia era ele conseguir fazer isso sozinho,
talvez sem o uso de Collections hehehe, eu lembro que fiz isso aí quando estudava a apostila da Caelum.

Pastei um pouco por não ter uma lógica muito boa na época, mas cheguei la hehe.[/quote]

Entendo.
Usei Collections e Arrays para utilizar o foreach, just it.

Sem elas, basta fazer:

	[code]String word = "abc def ghi";
	String[] words = word.split("[ ]+");
	for(int pos = words.length-1; pos >=0; pos--) {
		System.out.println(words[pos]);
	}[/code]

Abraços.

[quote=Vingdel][quote=nel]Seria algo como isso ?

String word = "abc def ghi"; String[] words = word.split("[ ]+"); Arrays.sort(words, Collections.reverseOrder()); for(String value : words) { System.out.println(value); }

Imprimiu:

ghi def abc

Senão for assim, qual deveria ser o resultado apresentado em tela?[/quote]

Olá, nel!

Legal sua solução para o foreach, mas, apesar de o resultado ser o mesmo, essa seria uma solução melhor que um simples for decrementando os indices, a nível de desempenho?
Além disso o rafael_czy está iniciando e acho que ele não chegou nesses conceitos de manipulação de um Array.

Abraço![/quote]

A questão de desempenho acredito que a solução que postei acima é melhor, ou seja, decrementando os indices. Isto porque eu uso dois métodos antes usar o foreach, que no fim das contas, é um Iterator sobre o array. Utilizando o for com decremento, eu estou acessando diretamente o Array sem necessidade de inverter seus valores, como fiz no sort e sem ter de chamar o método reverseOrder().

Portanto, ainda julgo o for com decremento melhor em termos de desempenho, todavia, somente com testes mais preciso e arrays significativos (eu diria com mais de 50.000 posições) para lhe dar uma resposta mais precisa.

Beleza, nel!

Fiz uma analise superficial, e consigo observar mais processos na situação de inverter o Array e em seguida usar foreach. A pergunta se seria a melhor forma foi para confirmar, afinal pelo que vejo em suas postagens pelo forum você parece trabalhar com java e tem, com cereteza, mais conhecimento no assunto que eu, que uso java de curioso, para meu assuntos manipulação arquivos em minhas traduções de jogos, puro e simples passatempo.

A opção de decremento dos indices estava sendo meu foco nas dicas que eu estava passando pra ele, acho que você pode perceber, agora vou esperar a resposta do rafael_czy para ver se ele entendeu de fato e conseguiu desenvolver para a necessidade dele.

Abraço!

[quote=Vingdel]Beleza, nel!

Fiz uma analise superficial, e consigo observar mais processos na situação de inverter o Array e em seguida usar foreach. A pergunta se seria a melhor forma foi para confirmar, afinal pelo que vejo em suas postagens pelo forum você parece trabalhar com java e tem, com cereteza, mais conhecimento no assunto que eu, que uso java de curioso, para meu assuntos manipulação arquivos em minhas traduções de jogos, puro e simples passatempo.

A opção de decremento dos indices estava sendo meu foco nas dicas que eu estava passando pra ele, acho que você pode perceber, agora vou esperar a resposta do rafael_czy para ver se ele entendeu de fato e conseguiu desenvolver para a necessidade dele.

Abraço![/quote]

Trabalho profissionalmente com Java mesmo uns 3 anos e nesse tempo consegui adquirir um pouco de experiência, mas ainda estou engatinhando. Sobre ter mais conhecimento, ai eu não sei, tudo depende da área, o que eu realmente tenho experiência é JEE, como JSF, EJB entre outros. Não me venha perguntar de AWT, J2ME, Swing que sou completamente leigo.
Gosto de participar do fórum pois acho de excelente qualidade sem falar em usuários muito experientes.

Sim, eu havia percebido mas acabo por ter o costume de usar Classes e API´s e acabei demonstrando da outra forta.

Concordo, aguardemos o nosso colega.
Forte abraço!

Sem elas, basta fazer:

	[code]String word = "abc def ghi";
	String[] words = word.split("[ ]+");
	for(int pos = words.length-1; pos >=0; pos--) {
		System.out.println(words[pos]);
	}[/code]

Abraços.[/quote]

ola nel
tao simples tao simples q qdo o cara começa a alterar, cada vez perde mais lógica, vai mais cego e estraga mais
eu poderia jurar que eu escrevi esse for seu e nao compilou
perdi a manha toda nisso
e agora de noite eu botei “i >= 0” e rodou
inacreditável

Valeu e abração

[quote]
A opção de decremento dos indices estava sendo meu foco nas dicas que eu estava passando pra ele, acho que você pode perceber, agora vou esperar a resposta do rafael_czy para ver se ele entendeu de fato e conseguiu desenvolver para a necessidade dele.

Abraço![/quote]

Valeu a ajuda ai friend
o FOR certo eral o que o nel botou ali onde citei
eu fiz esse tb mas nao compilou e eu descartei pensando que o probl era nele mas acho que descobri: eu devo ter feito esse FOR qdo me me referindo errado e vc citou

for (int i = palavra.length-1; i>=0; i-- ){  
	        System.out.print(palavras[i] + " ");

loucura mesmo
tantas horas numa babaquice ufss
ainda bem que adoro ficar horas estudan java
mas ja tive vontade de chorar um dia numa dessas rssss
vou manter aberto pq ainda vai vir mais duvida visto que a String tem mais umas coisas q quero estudar
valeu mesmo

PS
Realmente nao era pra usar foreach ou collections

rafaelczy, as coisas acontecem assim mesmo e isso serve apenas para amadurecimento seu.
Todos nós que já passamos por isso e ainda passamos, ficamos da mesma forma. Seja devido a um simples for ou a algo mais complexo, que no fim, era simples.

O mais importante é tirar disso uma lição e que todos nós saibamos que desenvolvimento também exige paciência e muita atenção.
Forte abraço e duvidas, é só ir postando.

[quote=nel]rafaelczy, as coisas acontecem assim mesmo e isso serve apenas para amadurecimento seu.
Todos nós que já passamos por isso e ainda passamos, ficamos da mesma forma. Seja devido a um simples for ou a algo mais complexo, que no fim, era simples.

O mais importante é tirar disso uma lição e que todos nós saibamos que desenvolvimento também exige paciência e muita atenção.
Forte abraço e duvidas, é só ir postando. [/quote]
really thanks friend
chove aqui e eu de-lhe java!

[quote=rafaelczy][quote]
A opção de decremento dos indices estava sendo meu foco nas dicas que eu estava passando pra ele, acho que você pode perceber, agora vou esperar a resposta do rafael_czy para ver se ele entendeu de fato e conseguiu desenvolver para a necessidade dele.

Abraço![/quote]

Valeu a ajuda ai friend
o FOR certo eral o que o nel botou ali onde citei
eu fiz esse tb mas nao compilou e eu descartei pensando que o probl era nele mas acho que descobri: eu devo ter feito esse FOR qdo me me referindo errado e vc citou

for (int i = palavra.length-1; i>=0; i-- ){  
	        System.out.print(palavras[i] + " ");

loucura mesmo
tantas horas numa babaquice ufss
ainda bem que adoro ficar horas estudan java
mas ja tive vontade de chorar um dia numa dessas rssss
vou manter aberto pq ainda vai vir mais duvida visto que a String tem mais umas coisas q quero estudar
valeu mesmo

PS
Realmente nao era pra usar foreach ou collections[/quote]
Falae, rafael_czy!

Exatamente, repare que na hora que você testou esse código aí a única coisa que você errou foi que você fez palavra.length-1 quando deveria fazer palavras.length-1… foi quando eu postei a citação abaixo:[quote=Vingdel][quote=rafaelczy]VingDel, eu nao falei mas eu percebi esse erro e arrumei mas mesmo assim da IndexOutOfBoundException: 3

for (int i = palavras.length; i>=0; i-- ){  
	        System.out.printf(palavras[i], " ");    
	    }

aqui me referio a palavras[] como podes ver[/quote]

Sim, perfeito, você acertou uma coisa e tirou uma coisa que estava certo.

O indices de um array vão de 0 a length-1… Você só precisava colocar o “s”, porém mexeu em mais coisa… Repare bem.

EDIT: Outro detalhe, o printf não me parece correto. O certo para printf seria printf("%s ", palavras[i]);

Poderia ser também print(palavras[i]+" ");

Abraço![/quote]

Enfim, o importante é que você tenha aprendido a lógica, como usar for, a diferença entre print, println e printf, e como manipular Arrays.

Boa sorte nos estudos e qualquer coisa é só postar a dúvida.

Abraço!