Substring não está funcionando, AGORA ME DIZ PORQUE!?

18 respostas
felipebonezi

Meu velho, estou a duas horas tentando entender porque cacetadas essa substring não está funcionando!!! :evil: :evil: :evil: :evil:
Alguém consegue ver o que eu não vejo :?: :?: :?: :?:

String [] aux3 = aux2.split(" ");
for (int i = 0; i < aux3.length; i++) {
   String aux = aux3[i].substring(0,10);
   conteudo.setText(conteudo.getText().toString() + aux + "\n\n" );
}

// Se eu colocar para mostar os valores de aux3[i] funciona, mas quando uso substring das 10 primeiras letras, não pega!
// PS:  A String tem mto mais de 10 letras....

Abraço :?

18 Respostas

ruivo

O que exatamente não funciona? Poderia dar exemplos?

Lucas_Abbatepaolo

Eh gerada alguma exceção ou simplesmente não retorna nada?

mauricioadl

substring gera excecão quando voce passar um parametro maior que a string, ex:
se voce passar 0, 10 e a string for mentor que 10 vai dar pau.
provavelmente o valor da string aux2 é menor que 10

Lucas_Abbatepaolo

mauricioadl:
substring gera excecão quando voce passar um parametro maior que a string, ex:
se voce passar 0, 10 e a string for mentor que 10 vai dar pau.
provavelmente o valor da string aux2 é menor que 10

mais o aux2 ele so usou pra dar o split…ele esta dando substring no array aux3

mauricioadl
mas eh isso mesmo. depois do split no aux2 as strings ficam menores que 10 dae ele tenta dar substring nelas e da exception
// isso da exception aux2 eh pequena
	String aux2 = &quot;m a&quot;;
		String [] aux3 = aux2.split(&quot; &quot;);
		for (int i = 0; i &lt; aux3.length; i++) {
		   String aux = aux3[i].substring(0,10);
		   System.out.println(aux3[i]);
		   System.out.println(aux);
		}

// isso nao dá porque aux2 eh grande
	String aux2 = &quot;mauricioalvesdelima&quot;;
		String [] aux3 = aux2.split(&quot; &quot;);
		for (int i = 0; i &lt; aux3.length; i++) {
		   String aux = aux3[i].substring(0,10);
		   System.out.println(aux3[i]);
		   System.out.println(aux);
		}
Lucas_Abbatepaolo

felipebonezi:
Meu velho, estou a duas horas tentando entender porque cacetadas essa substring não está funcionando!!! :evil: :evil: :evil: :evil:
Alguém consegue ver o que eu não vejo :?: :?: :?: :?:

String [] aux3 = aux2.split(" ");
for (int i = 0; i < aux3.length; i++) {
   String aux = aux3[i].substring(0,10);
   conteudo.setText(conteudo.getText().toString() + aux + "\n\n" );
}

// Se eu colocar para mostar os valores de aux3[i] funciona, mas quando uso substring das 10 primeiras letras, não pega!
// PS:  A String tem mto mais de 10 letras....

Abraço :?

no comentario ai abaixo ele garante q tem mais de 10 letras…

mauricioadl

Lucas Abbatepaolo:
felipebonezi:
Meu velho, estou a duas horas tentando entender porque cacetadas essa substring não está funcionando!!! :evil: :evil: :evil: :evil:
Alguém consegue ver o que eu não vejo :?: :?: :?: :?:

String [] aux3 = aux2.split(" ");
for (int i = 0; i < aux3.length; i++) {
   String aux = aux3[i].substring(0,10);
   conteudo.setText(conteudo.getText().toString() + aux + "\n\n" );
}

// Se eu colocar para mostar os valores de aux3[i] funciona, mas quando uso substring das 10 primeiras letras, não pega!
// PS:  A String tem mto mais de 10 letras....

Abraço :?

no comentario ai abaixo ele garante q tem mais de 10 letras…

pode ser que o slipt nesse caracter esquisito esteja quebrando a string dele e ele nao esta percebendo.

felipebonezi

Todas as Strings do Array possuem mais de 10 letras. :confused:

Lucas_Abbatepaolo

felipebonezi é lancada alguma exceção??

felipebonezi

IndexOutOfBounds :s

Mas o ‘start’ não é menor que 0, nem ‘start’ é maior que ‘end’ e nem ‘end’ é maior que o length da String.

felipebonezi

P.S.: Se eu colocar um substring começando em 0, ele pega toda a String e mostra ela normalmente, com mais de 10 letras.

Mas se eu utilizo o substring(start, end) acontece a exceção! :S

E

Tio, o Java é diferente do VB. Quando você escreve, em VB:

S = LEFT (T, 10)

onde T é uma string qualquer, você não tem problema nenhum se a string T tiver menos de 10 letras.

Mas Java é meio chata nesse ponto. O equivalente do código acima não é

S = T.substring (0, 10);

porque se T tiver menos de 10 letras, vai dar uma exceção mesmo, e isso está documentado no Javadoc.

Se você quer algo que é igualzinho ao LEFT do VB (ou seja, retorna uma string de 10 ou menos caracteres), use algo como:

S = T.substring (0, Math.min(10, T.length()));

Certo?

mauricioadl

coloca todo o codigo com as strings reais que voce esta usando pra nos aqui.

se a excecao for java.lang.StringIndexOutOfBoundsException é porque voce esta dando substring num valor maior que o maximo.

felipebonezi

Brother,
Analisa isso:

String qualquer = "Felipe Bonezi É Burro Pra Cacete";
String aux1 = qualquer.substring(0,10);
// aux1 == "Felipe Bon"
String aux2 = qualquer.substring(11);
// aux2 == "ezi É Burro Pra Cacete"

Estou correto? :S
O problema é que o substring não está funcionando aqui e está dando a Exception IndexOutOfBounds
:confused:

mauricioadl

felipebonezi:
Brother,
Analisa isso:

String qualquer = "Felipe Bonezi É Burro Pra Cacete";
String aux1 = qualquer.substring(0,10);
// aux1 == "Felipe Bon"
String aux2 = qualquer.substring(11);
// aux2 == "ezi É Burro Pra Cacete"

Estou correto? :S
O problema é que o substring não está funcionando aqui e está dando a Exception IndexOutOfBounds
:/

esse codigo a e funciona, mas coloca o codigo verdadeiro que esta dando o erro.

E

Felipe (já que você não gostou de ser chamado de “tio”), veja a minha explicação um pouquinho acima, e o Javadoc:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#substring(int,%20int)

Não fique batendo a cabeça. substring “puro” não funciona do jeito que você quer, e sim do jeito que está documentado. Se quiser que ele funcione do jeito que você quer, use o esquema do “Math.min” que lhe indiquei acima.

felipebonezi

É o seguinte, estou produzindo um aplicativo Android na qual eu “roubo” um conteúdo HTML de uma página. Quando eu dou o encoder desse html para String ele me retorna valores que não estão contidos no padrão de Encoding do Android (Cp1252) e sim em UTF-8. Quando eu converto o Enconding utilizando Bytes para o padrão do Android, começa essa bronca de não funcionar esse substring…

Estou começando a achar que o Enconding não está deixando o substring identificar o padrão da String…

Sei lá! =x

diego.sas

felipebonezi:
Brother,
Analisa isso:

String qualquer = "Felipe Bonezi É Burro Pra Cacete";
String aux1 = qualquer.substring(0,10);
// aux1 == "Felipe Bon"
String aux2 = qualquer.substring(11);
// aux2 == "ezi É Burro Pra Cacete"

Estou correto? :S
O problema é que o substring não está funcionando aqui e está dando a Exception IndexOutOfBounds
:/

Fala Felipe…
Cara é o seguinte…
No seu método você esta fazendo o Split…

String [] aux3 = aux2.split(" ");

Da uma conferida se todas as posições do seu array esta com mais de 10 caracteres!
Porque se você fizesse…

String qualquer = "Felipe Bonezi É Burro Pra Cacete";
String [] aux3 = qualquer.split(" ");
String aux = aux3[0].substring(0,10);  // A posição do aux[0] = Felipe, e Felipe so contém 6 caracteres

Com certeza ira ocorrer Exception.
Flw

Criado 9 de dezembro de 2011
Ultima resposta 9 de dez. de 2011
Respostas 18
Participantes 6