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

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

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

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

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

[quote=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[/quote]

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

mas eh isso mesmo. depois do split no aux2 as strings ficam menores que 10 dae ele tenta dar substring nelas e da exception

[code]
// isso da exception aux2 eh pequena
String aux2 = "m a";
String [] aux3 = aux2.split(" ");
for (int i = 0; i < 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 = "mauricioalvesdelima";
String [] aux3 = aux2.split(" ");
for (int i = 0; i < aux3.length; i++) {
String aux = aux3[i].substring(0,10);
System.out.println(aux3[i]);
System.out.println(aux);
}[/code]

[quote=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 :? [/quote]

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

[quote=Lucas Abbatepaolo][quote=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 :? [/quote]

no comentario ai abaixo ele garante q tem mais de 10 letras…[/quote]

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

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

felipebonezi é lancada alguma exceção??

IndexOutOfBounds :s

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

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

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?

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.

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:

[quote=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
:/[/quote]

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

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.

É 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

[quote=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
:/[/quote]

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