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???
Ele chegou a ler o arquivo um bom pedaço mais mesmo assim deu o erro
java.lang.ArrayIndexOutOfBoundsException!!>
foia
10:00 … ainda tô “bootando”. é isso mesmo !! :mrgreen: :mrgreen:
em que linha deu erro ?!
D
darta.lima
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?? :?:
foia
posta teu código ou o método inteiro.
fica mais fácil.
D
darta.lima
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.
publicvoidarquivo(){Stringlinha=null;ArquivoTextoValidaatv=newArquivoTextoValida();ArquivoTextoBeanatb=newArquivoTextoBean();Listl=newArrayList();intArray[]=null;try{FileReaderreader=newFileReader("arquivo.txt");BufferedReaderleitor=newBufferedReader(reader);/* grava o codigo-fonte no disco */StringarquivoFonte="saida.txt";PrintWritersaida=newPrintWriter(newBufferedWriter(newFileWriter(arquivoFonte)));leitor.readLine();//Leio a primeira linha e descartowhile((linha=leitor.readLine())!=null){//Pega apartir da segunda.Stringret[];ret=linha.split(";");for(intj=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));Stringstatus=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]));}elseif(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(Exceptione){e.printStackTrace();System.out.println("Erro ao gerar arquivo de saida!! "+e);}}
foia
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 !?
D
darta.lima
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???
:?:
noobsaibot
Olá amigos,
Resolvi reaproveitar este tópico, pois, estou encontrando dificuldades para executar o seguinte código:
packageorg.nsclient4j;publicclassCLStat{publicstaticvoidmain(Stringargs[]){try{NSClient4jclient=newNSClient4j("10.1.1.15");System.out.print("Result:"+client.getPerfMonCounter("\Processador(_Total)\% tempo de processador"));}catch(NSClient4JExceptione){System.err.println("Exception Geting Stat:"+e);}}}
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!
P
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.
P
PhillTi
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.
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;