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

41 respostas
R

Bom pessoal a apostila da caelum pede pra escrever um método que usa os métodos charAt e length de uma String para imprimir a mesma
caractere a caractere, com cada caractere em uma linha diferente.
bom isso consegui

String string = "abc";
for (int i = 0; i < string.length(); i++){
				System.out.println(string.charAt(i));
			}

mas nao consegui implementar um metodo de tal forma que escreva a string ao contrario caractere por caractere
alguma dica ai ?

41 Respostas

robsonsm

StringBuilder e StringBuffer possui o metodo reverse.

robsonsm

Se for seguir a mesma logica, vc pode fazer “i” ir do tamanho da string ate chegar a 0

String string = "abc"; for (int i = string.length()-1; i >= 0; i--){ System.out.println(string.charAt(i)); }

R

robsonsm:
Se for seguir a mesma logica, vc pode fazer “i” ir do tamanho da string ate chegar a 0

String string = "abc"; for (int i = string.length()-1; i >= 0; i--){ System.out.println(string.charAt(i)); }

thanks men
agora vou testar os metodos q vc falou

R

cara nao to consguindo criar um objeto StringBuffer pra chamar o metodo reverse. nao conseguindo escrever a sintaxe direito.
pode me ajudar?

robsonsm

StringBuffer sb = new StringBuffer("abc"); System.out.println(sb.reverse().toString());

R

robsonsm:
StringBuffer sb = new StringBuffer("abc"); System.out.println(sb.reverse().toString());

pq q tem que chamar toString tb Robson?

robsonsm

não é necessário, pode retirar.

Rodrigo_Sasaki

rafaelczy , com certeza utilizar o método reverse() ou qualquer outra coisa ja pronta vai funcionar e ser bem mais fácil,

mas como você está acompanhando uma apostila da Caelum o idela é que você quebre a cabeça mesmo pra tentar desenvolver o exercício, de qualquer maneira que conseguir, depois vai refatorando a medida que adquire conhecimento e prática.

Claro, só uma sugestão minha.

Abraço!

R

Não tinha pensado nisso Wellingtom. nem pensei q isso era possivel. bela dica.
obrigado a vc tb Digao !

R

Pessoal a apostila da caelum pede pra escrever uma frase mas com as palavras em ordem invertida usando o metodo Split() da classe String

String palavra = "abc def";
System.out.println(palavra.split(palavra));

Mas o codigo acima esta errado. Onde estou errando ?
O resultado abaixo não é o que eu esperava, acho q isso deve ser o numero dessa variavel na memoria

[Ljava.lang.String;@16f0472

nel

rafaelczy:
Pessoal a apostila da caelum pede pra escrever uma frase mas com as palavras em ordem invertida usando o metodo Split() da classe String

String palavra = "abc def";
System.out.println(palavra.split(palavra));

Mas o codigo acima esta errado. Onde estou errando ?
O resultado abaixo não é o que eu esperava, acho q isso deve ser o numero dessa variavel na memoria

[Ljava.lang.String;@16f0472

Mas é lógico, você passou sua String em um método que vai aplicar uma Regex.
Se queres os espaços dela, pode usar:

palavra.split(" ")

Acho que isso aqui também funciona:

palavra.split("[ ]+")
R

[quote=nel]

rafaelczy:
Pessoal a apostila da caelum pede pra escrever uma frase mas com as palavras em ordem invertida usando o metodo Split() da classe String

String palavra = "abc def";
System.out.println(palavra.split(palavra));

Mas o codigo acima esta errado. Onde estou errando ?
O resultado abaixo não é o que eu esperava, acho q isso deve ser o numero dessa variavel na memoria

[Ljava.lang.String;@16f0472

Mas é lógico, você passou sua String em um método que vai aplicar uma Regex.
Se queres os espaços dela, pode usar:

palavra.split(" ")

Acho que isso aqui também funciona:

palavra.split("[ ]+")

tentei assim como vc disse

String palavra = "abc def";
System.out.println(palavra.split(" "));

mas continua dando: [Ljava.lang.String;@ad3ba4
e nao inverteu a ordem da palavra na string que dei
alguma outr dica ai ?

Vingdel

Sim, claro, rafaelczy!

o método split() serve para quebrar a string e retornar um array.

Para imprimir você tem charmar os indices do array.

tente fazer.
String palavra = "abc def ghi";
String[] palavras = palavra.split(" ");

for(int i = 0; i < palavras.length; i++)
	System.out.println(palavras[i]);

Abraço!

R
Vingdel:
Sim, claro, rafaelczy!

o método split() serve para quebrar a string e retornar um array.

Para imprimir você tem charmar os indices do array.

tente fazer.
String palavra = "abc def ghi";
String[] palavras = palavra.split(" ");

for(int i = 0; i < palavras.length; i++)
	System.out.println(palavras[i]);

Abraço!

Ai amigo..implemntei seu codigo mas da ArrayIndexOutOfBoundsException
to tentando arrumar mas ainda nao consegui

R

Desculpa Vingdel mas me confundi aqui.
seu exemplo nao ta lançcando erro de exceçao como postei acima
mas tambem nao esta imprimindo a string palavra com as palvras que a constituem em ordem invertida como pede a apostila
mais alguma dica ai ?

R

puxa que confusao
desculpa vingdel
sao os meus codigos que nao estao escrevendo nada no retorno e n ao o seu
o seu ta certo mas em parte pq imprime
abc
def
ghi

e o que a apostila pede é que seja impresso assim
ghi
def
abc

to tentando aqui mas aceitos sua ajuda de novo

Vingdel

rafael_czy, eu apenas te mostrei como o método split() funciona.

Você já aprendeu como inverter as palavras, amigão.

Cabe a você juntar as informações, e usa-las de forma combinda para chegar ao resultado desejado.

Não adianta trazermos os brinquedos e brincarmos na sua frente. Você não vai se divertir. Os brinquedos estão aí pra você brincar. Entendeu?

Abraço!

R
String palavra = "abc def ghi";  	    
String[] palavras = palavra.split(" ");

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

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…

R

ok
bom entao so me resta me esforçar mais
vou tentar
obrigado VingDel

Vingdel
rafaelczy:
String palavra = "abc def ghi";  	    
String[] palavras = palavra.split(" ");

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

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....

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!

R

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

R
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

Vingdel

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

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!

nel
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);
		}
Vingdel
nel:
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);
		}

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

Tem como fazer com foreach?

Abraço!

Rodrigo_Sasaki

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?

R

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

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?

Rodrigo_Sasaki

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?

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.

Vingdel

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?

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!

nel
digaoneves:
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?

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.

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

Sem elas, basta fazer:

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

Abraços.

nel

Vingdel:
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?

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!

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.

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!

nel

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!

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!

R

Sem elas, basta fazer:

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

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

R


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!

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

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.

R

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.


really thanks friend
chove aqui e eu de-lhe java!

Vingdel

rafaelczy:

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!

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


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:

Vingdel:
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

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!

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!

A
WellingtonRamos

robsonsm:
Se for seguir a mesma logica, vc pode fazer “i” ir do tamanho da string ate chegar a 0

String string = "abc"; for (int i = string.length()-1; i >= 0; i--){ System.out.println(string.charAt(i)); }


Eu faria uma pequena modificação aqui. Bom para conhecer outra forma de fazer este exercício:

String string = "abc"; for (int i = string.length(); i > 0; ){ //Note que removi o decremento do for e removi o -1 da inicialização da variável e o comparador não pode mais ser igual System.out.println(string.charAt(--i)); //Note que coloque um decremento um pouco diferente do que havia no for } [/quote]

Esta forma não é muito tradicional, e a intenção é remover uma subtração (na inicialização do i). Para que funcione, é necessário utilizar o decremento a frente da variável que tem função de atualizar a variável antes que a mesma seja lida. Se o sinal de decremento for após, a variável será lida e depois atualizada.

Criado 24 de outubro de 2011
Ultima resposta 25 de out. de 2011
Respostas 41
Participantes 7