Java.lang.ArrayIndexOutOfBoundsException ?

Galera, eu tenho uma array que gerado por um split(";"), a partir da leitura de um arquivo texto.

..
String ret[];
ret = linha.split(";");
..

Depois disso eu vou pegando as posições que preciso nesse array e vou setando set(ret[0]), set(ret[2]), set(ret[4]) etc… só que as linhas do arquivo ora vem com 236 ponto e virgulas( ; ) e ora vem com 220, ora vem com 230 etc… então quando tento pegar o indice de ret[233] ele dá java.lang.ArrayIndexOutOfBoundsException, pois não existe, nas linhas que tem o array com o tamanho acima de 233 ele vai senão dá esse erro…

teria uma forma de eu acertar isso, para que não de esse erro???

um abraço. :?: :cry:

Coloca o loop no qual você seta o array.

Márcio

Ai está o loop!!

...
ArquivoTextoBean atb = new ArquivoTextoBean();

FileReader reader = new FileReader("arquivo.txt");
BufferedReader leitor = new BufferedReader(reader);

while ((linha = leitor.readLine()) != null) {
		 	
String ret[];
ret = linha.split(";");	 

atb.setContrato(atv.ValidaContrato(ret[0],25));
...
...
...
}
...

:thumbup:

usa o .length no array para saber o número de “splits” (tamanho do array).

assim:

[code]
String ret[];
ret = linha.split(";");

for(int j=0; j<ret.length; ret++)
{
set(ret[j]);
}

[/code]>

No caso seria…

 String ret[];
   ret = linha.split(";");
 
  for(int j=0; j&lt;ret.length; j++)
  {
     set(ret[j]);
   }
 

senão vai dar erro em ret++!?

Ele chegou a ler o arquivo um bom pedaço mais mesmo assim deu o erro
java.lang.ArrayIndexOutOfBoundsException!!>

10:00 … ainda tô “bootando”. é isso mesmo !! :mrgreen: :mrgreen:
em que linha deu erro ?!

Está dando erro logo na sétima linha, pois estu tentando pegar o indice ret[223] e essa linha não tem a quantidade de ( ; ) suficiente para chegar a esse indice pois cada linha vem com tamanho diferente.

Não sei se vc está entendendo o que está acontecendo?? :?:

posta teu código ou o método inteiro.

fica mais fácil.

Ai está!!! dá erro onde está em negrito ret[223], mas como as linhas do arquivo podem vir com ( ; ) variando para mais ou menos entã pode dar erro em qualque lugar.

[code]
public void arquivo() {
String linha = null;
ArquivoTextoValida atv = new ArquivoTextoValida();
ArquivoTextoBean atb = new ArquivoTextoBean();
List l = new ArrayList();
int Array[] = null;

try {
FileReader reader = new FileReader(“arquivo.txt”);
BufferedReader leitor = new BufferedReader(reader);

/* grava o codigo-fonte no disco */
String arquivoFonte = "saida.txt";
PrintWriter saida = new PrintWriter(new BufferedWriter(new FileWriter(arquivoFonte)));

leitor.readLine();//Leio a primeira linha e descarto
while ((linha = leitor.readLine()) != null) {//Pega apartir da segunda.
 	
 	String ret[];
	ret = linha.split(";");	 
	
	for(int j=0; j < ret.length; j++){
	   
		atb.setContrato(atv.ValidaContrato(ret[0],25));
	
		atb.setContaCorrente(atv.ValidaContaCorrente(ret[2],ret[154]));
					 	   	
		atb.setDesignacaoCVP(atv.ValidaDesignacaoCVP(ret[7],50));
		
		atb.setDesignacaoPontaAB(atv.ValidaDesignacaoPontaAB(ret[8],ret[9],50));
			
		atb.setVelocidadeCIR(atv.ValidaVelocidadeCIR(ret[11], ret[12],20));
		
		atb.setDlciPortaAB(atv.ValidaDLCIPortaAB(ret[13],ret[14],5));
		
		atb.setStatusFacilidadeCircuito(atv.ValidaStatusFacilidadeCircuito(ret[18],25));
		String status = ret[18];
		if(!status.equals("") || status != ""){
			if(status.toUpperCase().equals("ATIVADA") || status.toUpperCase().equals("ATIVADA DADOS") || status.toUpperCase().equals("ATIVADA VOZ")){
				atb.setDataAtividadeCadastroCVP(atv.ValidaDataAtividadeCadastramentoCVP(ret[21]));
			}else if(status.toUpperCase().equals("CONTRATADA")){
				atb.setDataAtividadeCadastroCVP(atv.ValidaDataAtividadeCadastramentoCVP(ret[22]));
			}else{
				atb.setDataAtividadeCadastroCVP("00/00/0000");
			}
		}else{
			atb.setDataAtividadeCadastroCVP("00/00/0000");
		}
		
		atb.setDesignacaoPortaAB(atv.ValidaDesignacaoPortaAB(ret[46],ret[79],50));

		atb.setVelocidadeSCRAB_BA(atv.ValidaVelocidadeSRCAB_BA(ret[166],ret[167],10));

		atb.setVelocidadePCRAB_BA(atv.ValidaVelocidadePCRAB(ret[168],ret[169],10));
		
		atb.setFacilidadePontaAB(atv.ValidaFacilidadeAB(ret[194],[b]ret[223][/b],32));

		atb.setSiglaServico(atv.ValidaSiglaServico(7));
		
		if ( !ret[43].equals(ret[76])){
        			atb.setPlataformaPortaAB(atv.ValidaPlataformaPortaAB(ret[43],50));
        			l.add(atb);					
			atb.setPlataformaPortaAB(atv.ValidaPlataformaPortaAB(ret[76],50));
		}else{
			atb.setPlataformaPortaAB(atv.ValidaPlataformaPortaAB(ret[43],50));
		}
	l.add(atb);//Adiciona na lista o objeto			
 }

}
System.out.println(“Arquivo gerado com sucesso!!”);
leitor.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("Erro ao gerar arquivo de saida!! " + e);
}
}[/code]

pois é, vai ter que tirar o for de lá e colocar um if antes de cada setXXX. fica feio, mas funciona. :mrgreen: :mrgreen:

obs: pelo visto esta “carga” não tem um padrão, certo !?

Seguinte, porque isso acontece, fiz um teste aqui e o split() não está refletindo a quantidade de ( ; ), porque???

Ex…esse é um pedaço do arquivo, duas linhas 1º linha tem 42 ( ; ) a 2º tem 18 ( ; ), mandei ele escrever a quantidade de ( ; ) que ele está achando e ele imprime só 7 porque??? ele está pegando só até o último ( ; ) após o FRAME-RELAY o resto ele descarta porque???

:?:

Olá amigos,

Resolvi reaproveitar este tópico, pois, estou encontrando dificuldades para executar o seguinte código:

[code]
package org.nsclient4j;

public class CLStat {
public static void main(String args[]) {
try {
NSClient4j client = new NSClient4j(“10.1.1.15”);
System.out.print(“Result:” + client.getPerfMonCounter("\Processador(_Total)% tempo de processador"));
} catch (NSClient4JException e) {
System.err.println(“Exception Geting Stat:” + e);
}
}
}[/code]

Executo ele através da seguinte linha de comando:

java org.nsclient4j.CLStat

E estou obtendo o seguinte erro:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
        at org.nsclient4j.CLStat.main(CLStat.java:14)

Espero que possam me ajudar.

Grato!

To com o mesmo erro dos amigos acima… Alguém tem alguma solução para quando usamos Split em um arquivo que não seja padronizado? Ou seja, podem existir splits a mais ou a menos…

Já tentei testar se split é vazio com if, usar o tokenizer mas nada deu certo. :shock:

Obrigado.

[quote=PhillTi]To com o mesmo erro dos amigos acima… Alguém tem alguma solução para quando usamos Split em um arquivo que não seja padronizado? Ou seja, podem existir splits a mais ou a menos…

Já tentei testar se split é vazio com if, usar o tokenizer mas nada deu certo. :shock:

Obrigado.[/quote]

Fala galera.

Depois de quebrar a cabeça aqui consegui encontrar a solução que seria testar a quantidade de arrays gerados pelo split da linha lida do arquivo e tratar de acordo com esta condição;

ex:

if (linha.split(" ").length < 3)
      {
          teste1 = linha.split(" ")[2];
       }
else
      {
          teste1 = linha.split(" ")[3]
       }

Até mais…