Estou desenvolvendo um programinha em Java que captura o conteúdo de um arquivo que em cada linha dele tem 600 posições. O conteúdo do arquivo fica dentro de um array e eu localizo cada parte da linha utilizando um array[0].substring(). Ele funciona normal até um certo número, pois se eu tento localizar o registro array[0].substring(530,589) ele me acusa erro de out of range. Mas a linha que ele tentou ler tem as 600 poisições.
Eu abri o arquivo e na linha que ele dá o erro ele tem conteúdo, e na linha que não tem conteúdo ele passa normal.
o segundo argumento do método subString é a quantidade de caracteres à partir do primeiro argumento. ou seja, você está tentando pegar do caractere 530 ao 1119.
Na realidade o segundo parâmetro é o índice final mesmo, está correto.
Mas essa String não deve ter essa quantidade de caracteres não, dê uma olhada nisso aí, tente imprimir o tamanho da String pra você ver, ou inspecionar o valor da variável pra ver o que foi colocado no array, talvez o erro esteja no preenchimento do array e não no substring.
Obrigado pela ajuda ai galera, mas to achando estranho uma coisa.
Fiz o length, e nas linhas que ele me mostrou o resultado, blz, ele acusou o tamanho de 600, mas na que deu o erro ele acusou menor mesmo, por isso do erro de out of bounds, mas se vc abre o arquivo essa mesma linha tem as mesmas 600 posições, onde a única diferença dela é um pouco mais de caracteres ao invés de espaços em branco.
Um exemplo de que funcionou na leitura:
1118779 ABADIA NEVES BERETA DE SOUZA 06882000010012360AVENIDA MAJOR NICACIO 2842 SAO JOSE 310SP1440346016372423020766832880711959788013SSUSPENSO CLAUS 3 PAR 4 II31/03/06 16653085 SSPSP23/11/65 B00000000000F00000002
Agora um que deu erro:
155467 ABDALA MACHADO DA COSTA 00523000010092671R 13 DE MAIO 1500 CENTRO 536SP13630000195613522 5834525687211140746078A 5325072 SSP 18/01/52rogertedesco@hotmail.com B00000000000M00000008
Copiei e colei até em outro lugar essas duas linhas mas estão aparentemente idênticas.
Normalmente isso é algum problema com caracteres não-imprimíveis (por exemplo, zeros binários dentro do arquivo, ou vários Carriage Returns (ASCII 13, Unicode \u000D, Java \r com apenas um Line Feed (ASCII 10, Unicode \u000A, \n).
Será possível você tentar abrir o mesmo arquivo em um editor que mostre a codificação hexadecimal das linhas? Pode ser que você descubra alguma coisa estranha nesse arquivo. O Java costuma filtrar o lixo quando você lê o arquivo como arquivo-texto.
Eu normalmente nunca uso diretamente “substring” porque ele tem esse problema de dar uma exceção se você exceder algum dos limites. Eu prefiro escrever um encapsulamento para “substring” que retorne “” se por acaso houver alguma coisa que exceder algum limite.
Boa tarde amigo. Vejo que provavelmente você deve estar trabalhando com layout de algum sistema. Se não for, eu trabalho e algumas vezes passo por algo parecido. Quando eu tenho esse erro é porque está acontecendo o seguinte: o método substring() pressupões que você esteja escrevendo em uma única linha. Então, quando passamos o conteúdo para algum arquivo, um txt, por exemplo, há quebra de linhas. O que pode estar ocorrendo é o seu arquivo ter gerado uma quebra de linha em algum lugar. O que eu recomendo: Em vez de gerar um txt, crie uma StringBuffer, jogue num loop for, e cada passagem do loop, vá concatenando os pedaços de String que você precisa. Assim que terminar, você cria uma String qualquer e atribui a ela o valor armazenado na StringBuffer. Daí você vai ter certeza mesmo que não houve quebra de linha. Depois de feito isso, dê um System.out.println() e informe o tamanho da linha de sua String. Depois compare com o arquivo gerado.