Substring dando erro.: String index out of range [RESOLVIDO]

11 respostas
M

Estou com erro de.: String index out of range:

Tenho uma função que pega o nome dos arquivos…

Por exemplo, suponhamos que o nome do arquivo seja.:

35121116634182000192550000000000261102700040-procNfe.xml

public boolean accept(File pathname){  
         String nome_xml = pathname.getName().toLowerCase();
         return pathname.getName().toLowerCase().substring(22,34).contains(tf_nf.getText()) && pathname.getName().toLowerCase().endsWith(".xml") ; 
     }

Quando chamo a função, ele me retorna o seguinte erro.:

Exception in thread "Thread-18" java.lang.StringIndexOutOfBoundsException: String index out of range: 34
	at java.lang.String.substring(String.java:1934)

Pq dá estouro no range se o nome do arquivo é mto maior que 34 carac.??

11 Respostas

V

Ja viu no debug qual o valor de pathname.getName()?

A

Acredito que a string esta vindo nula ou com um nome inferior a range que vc tá passando no substring … veja senão é isto ?

M
victormagno

por isso que fiquei encabulado cara…

Olha o retorno do .: pathname

PathName.: 35121116634182000192550000000000441871499030-procnfe.xml
L
victormagno

por isso que fiquei encabulado cara…

Olha o retorno do .: pathname

PathName.: 35121116634182000192550000000000441871499030-procnfe.xml

Oi,

Impossível.

public boolean accept(File pathname){ String nome_xml = pathname.getName().toLowerCase(); System.out.println(nome_xml); return nome_xml.substring(22,34).contains(tf_nf.getText()) && pathname.getName().toLowerCase().endsWith(".xml") ; }

  1. Porque você criou a String nome_xml se a mesma não está sendo utilizada?
  2. Curisosidade: Porque pegar as posições 22 até 34?
  3. Post resultado do código acima.

Tchauzin!

M
  1. Porque você criou a String nome_xml se a mesma não está sendo utilizada?

  2. Curisosidade: Porque pegar as posições 22 até 34?

  3. Post resultado do código acima.

  4. Na verdade eu estava usando, depois nao usei mais e acabei deixando assim.

  5. Estou fazendo uns testes pra verificação do nº da NF, e no caminho está nessa posição. (Ex: NF ‘44’.: …000000000044…)

Exception in thread "Thread-6" java.lang.StringIndexOutOfBoundsException: String index out of range: 34
	at java.lang.String.substring(String.java:1934)

Erro na linha.:

return nome_xml.substring(22,34).contains(tf_nf.getText()) && pathname.getName().toLowerCase().endsWith(".xml") ;
L

Oi,

Como eu disse antes: Impossível.

a String nome_xml não tem o valor “35121116634182000192550000000000441871499030-procnfe.xml”.

Olhe:

System.out.println("35121116634182000192550000000000441871499030-procnfe.xml".substring(22, 34)); Resultado: 000000000044

Tchauzin!

M

Tem razão lina.
Burrice minha.

Você tem razão, vou testar e retorno aqui.

Obg; :wink:

M

Mas ainda nao sei entendi a logica do meu erro e isso ta incomodando....

String nome_xml =  "35121116634182000192550000000000261102700040-procNfe.xml";
//nome_xml.substring(22,34)
//O retorno é.: 000000000026

Se quando eu faço isso.:

return nome_xml.substring(22,34).contains(tf_nf.getText()) && nome_xml.endsWith(".xml");
// Eu peço pra verificar o valor (no caso: 000000000026 ) se contem o numero que está no campo.: tf_nf.getText() - '26' por exemplo tem no conteudo da String,
Por que ainda dá erro?
Exception in thread "Thread-4" java.lang.StringIndexOutOfBoundsException: String index out of range: 34
	at java.lang.String.substring(String.java:1934)
	at FORMULARIO_DESPACHO$envia_emailThread$1.accept(FORMULARIO_DESPACHO.java:898)
V

Cara, realmente o length de nome_xml é menor que 35… debugando você consegue ver isso.

L

Oi,

Até agora você não me mandou o resultado do Sysout que eu coloquei no código…

Faz assim (só pra medir a febre):

return nome_xml.substring(22,nome_xml.length()).contains(tf_nf.getText()) && nome_xml.endsWith(".xml");

Tchauzin!

M

Sabia que não estava ficando louco…

o.:

//nome_xml.length()

//retorna 56

Mas descobri o erro.
Na verdade eu estava analisando isso.:

return nome_xml.substring(22,34).contains(tf_nf.getText()) && pathname.getName().toLowerCase().endsWith(".xml") ;

O que acontece…

Eu tenho arquivos .pdf também… que nao tem muitos caracteres… é onde ele gerava o erro… pq primeiro analisava o substring pra depois ver se era .xml

A parte do código ficou assim.:

return nome_xml.endsWith(".xml") && nome_xml.substring(22,34).endsWith(tf_nf.getText());

Agradeço a todos pela ajuda.

Criado 13 de dezembro de 2012
Ultima resposta 14 de dez. de 2012
Respostas 11
Participantes 4