dúvida em substring  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
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
[MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Será? Imprima o valor de "length" dessa tal string.
[WWW]
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.
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
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
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).


[WWW]
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.


[MSN]
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.

[WWW]
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
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?

[MSN]
oddy.silva
JavaEvangelist
[Avatar]

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.
[Email]
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
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team