Dai ele separa a String principal em varios tokens (pedacos de string) separados e vc pega o indice que vc quiser.
vinidouradoh
já tentou o StringTokenizer?
vlw
spycall
Você pode usar o StringTokenizer usando o “.” como separador.
Ele vai te retornar um arry de strings, daí é só você fazer um “for” até o nivel que vc quer.
thegoergen
Valeu todo mundo
Eu que nao tava me lembrando do StringTokenizer… :oops:
Resolvi assim:
privatestaticStringgetNivelComTokenizer(Stringstr,intnroNivel){StringTokenizert=newStringTokenizer(str,".");Stringret="";inti=0;while(t.hasMoreElements()){ret+=t.nextElement();i++;if(i==nroNivel){break;}//Preciso adicionar o .ret+=".";}returnret;}
M
marcobiscaro2112
Mas nem precisa de StringTokenizer… o método spit da classe String já faz o trabalho sujo…
Só mais uma coisa: eu usaria StringBuilder para as variáveis ret, pois melhora ainda mais o desempenho. Apesar de o Tokenizer se sair um pouco mais rápido em algumas vezes, como já dito ele já é um “idoso” e eu considero mais legível o código com o split. Mais aí vai de cada um.
maior_abandonado
thegoergen:
marcobiscaro2112:
Mas nem precisa de StringTokenizer… o método spit da classe String já faz o trabalho sujo…
Ou seja, a partir do índice do array palavras você pode pegar a parte que quiser.
E qual modo é mais rápido, será?
po…testa ai… da um System.currentTimeMillis(); antes e depois do processo e subtrai o primeiro do segundo, o que da um valor menor é o mais rápido…
edit…até eu falar pra vc testar vc ja tinha feito…rs
M
marcobiscaro2112
De fato, também fiz uns testes e o StringTokenizer é mais rápido. Mas a diferença só é significativa para enormes quantidades. A média de diferença é de 0,1 milissegundo por iteração. A adaptação para o StringBuilder ficaria assim:
// feito com TokenizerpublicstaticStringgetNivelTokenizer(Strings,intnivel){StringTokenizertoken=newStringTokenizer(s,".");StringBuilderresult=newStringBuilder();inti=0;while(token.hasMoreElements()){result.append(token.nextToken());if(++i==nivel){break;}result.append(".");}returnresult.toString();}// feito com o splitpublicstaticStringgetNivelSplit(Strings,intnivel){String[]niveis=s.split("\.");StringBuilderresult=newStringBuilder();inti=0;for(Stringa:niveis){result.append(a);if(++i==nivel){break;}result.append(".");}returnresult.toString();}
Pedrosa
Realmente StringTokenizer é mais rápida que loucura, alguém me explica como uma classe antiga pode ser mais rápida:
packagebr.com.pedrosa.teste;importjava.util.ArrayList;importjava.util.List;importjava.util.StringTokenizer;publicclassTeste{publicstaticvoidmain(String[]sss)throwsException{List<String>a=newArrayList<String>();Testeteste=newTeste();for(inti=0;i<1000;i++){// Inicializo o ArrayLista.add("1.2.3.4.5.6.7.8.9");// com 9 niveis}for(intnroNivel=1;nroNivel<10;nroNivel++){longtempoInicial=System.currentTimeMillis();for(inti=0;i<a.size();i++){teste.getNivelTokenizer(a.get(i),nroNivel);}System.out.printf("Resultado Final StringTokenizer %.3f ms%n",(System.currentTimeMillis()-tempoInicial)/1000d);for(inti=0;i<a.size();i++){teste.getNivelSplit(a.get(i),nroNivel);}System.out.printf("Resultado Final Split %.3f ms%n",(System.currentTimeMillis()-tempoInicial)/1000d);}}publicStringgetNivelTokenizer(Strings,intnivel){StringTokenizertoken=newStringTokenizer(s,".");StringBuilderresult=newStringBuilder();inti=0;while(token.hasMoreElements()){result.append(token.nextToken());if(++i==nivel){break;}result.append(".");}returnresult.toString();}// feito com o splitpublicStringgetNivelSplit(Strings,intnivel){String[]niveis=s.split("\.");StringBuilderresult=newStringBuilder();inti=0;for(Stringa:niveis){result.append(a);if(++i==nivel){break;}result.append(".");}returnresult.toString();}}
Mas cuidado ao concatenar String evite o += sempre use StringBuilder com append.
M
marcobiscaro2112
Por que é mais rápida eu não sei, mas a documentação é bem clara quanto ao seu uso:
Ou seja, ainda existe apenas para compatibilidade com programas antigos. Não use em códigos novos! Use o split da classe String ou o pacote java.util.regex.
thegoergen
Usando StringBuilder ficou ainda mais rápido.
Valeu pra todo mundo, e me desculpem, mas eu já nem preciso mais disso, mudei minha lógica… :oops:
Sobre tokenizer ser antigo, ele deve ser mais simples talvez, por isso fica mais rápido… sei lá…