| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2009 14:38:12
|
icjunior07
Debugger
Membro desde: 31/08/2008 18:57:37
Mensagens: 66
Offline
|
Boa tarde a todos,
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 . Ele funciona normal até um certo número, pois se eu tento localizar o registro 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.
Alguém já pegou algo parecido?
[]´s
Junior
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2009 14:42:26
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Será? Imprima o valor de "length" dessa tal string.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2009 14:45:11
|
bKn
Java Ninja
Membro desde: 07/04/2009 15:22:18
Mensagens: 288
Offline
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2009 14:48:59
|
jairelton
JavaChild
Membro desde: 23/06/2006 13:36:04
Mensagens: 108
Offline
|
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.
|
Jair Elton |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2009 14:49:10
|
gujuser
JavaBaby
Membro desde: 26/03/2009 09:20:40
Mensagens: 75
Offline
|
Boa tarde,
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.
não é não. provavelmente a linha é menor mesmo, sysout no length mesmo. flw.
This message was edited 1 time. Last update was at 08/04/2009 14:49:57
|
[]'s |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2009 14:52:30
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
bKn wrote: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.
Não é a quantidade coisa nenhuma. Não é C++ nem VB nem C#. O segundo parâmetro é a posição final (exclusive).
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2009 14:57:32
|
icjunior07
Debugger
Membro desde: 31/08/2008 18:57:37
Mensagens: 66
Offline
|
Boa tarde,
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:
Agora um que deu erro:
Copiei e colei até em outro lugar essas duas linhas mas estão aparentemente idênticas.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2009 15:05:41
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2009 15:07:00
|
gujuser
JavaBaby
Membro desde: 26/03/2009 09:20:40
Mensagens: 75
Offline
|
Boa Tarde,
não é possível... a posição existe nas duas linhas!
vc tem ctz que o erro ocorre nessas linhas mesmo?
só para testar, pegue essas duas linhas e rode o programa só pra
elas e veja o que acontece.
flw.
|
[]'s |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2009 15:11:11
|
icjunior07
Debugger
Membro desde: 31/08/2008 18:57:37
Mensagens: 66
Offline
|
Então, eu rodei nessas duas linhas e o erro acusou naquela em que tem o endereço de email.
Aí fiz o seguinte teste:
- tirei o email dessa linha e mandei rodar novamente, aí foi normal.
Será que tem algum caracter estranho ali quando tem o email?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2009 15:19:29
|
oddy.silva
JavaEvangelist
![[Avatar]](/images/avatar/3647532ec07150bfa31ec2896932bdfb.jpg)
Membro desde: 24/11/2008 11:42:10
Mensagens: 352
Localização: Itu
Offline
|
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.
|
Odair
Gestão em T.I
FATEC - ITU
"Quem quer fazer alguma coisa, encontra um meio"
Quer ser um programador veloz? Então compre um par de tênis a jato.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2009 15:21:46
|
gujuser
JavaBaby
Membro desde: 26/03/2009 09:20:40
Mensagens: 75
Offline
|
Então, eu rodei nessas duas linhas e o erro acusou naquela em que tem o endereço de email.
Aí fiz o seguinte teste:
- tirei o email dessa linha e mandei rodar novamente, aí foi normal.
Será que tem algum caracter estranho ali quando tem o email?
tira só o "@" e testa ae pra ver..
flw.
|
[]'s |
|
|
 |
|
|