Como pegar um dado contido no terceiro campo de uma String? [Resolvido]

[quote=neohacker]Cara então acho que a única solução (se alguém souber outra vamos lá) é partir pra análize lexicográfica, porque se vc nem sabe como vai vim o arquivo, somente a ordem dos campos fica difícil

Boa Sorte :)[/quote]

Eu sei como o arquivo vem. Ele sempre vem da mesma forma.

codigo + espaços em branco + nome + espaços em branco + endereço + espaços em branco + …

Então silva.fernandes, mas ele disse que precisa pegar o 3º conjunto de caracteres, dessa forma ele precisa conhecer o que está escrito no campo, não é ??
Acho que ele vai ter que fazer a busca pela String procurando pelo 1º caracter e parar após ter por exemplo 3 espaçoes em branco. o que vc acha ??

gp7junior são espaços e não TAB ??
e vc não pode garantir a quantidade de espaços ??

[quote=neohacker]Então silva.fernandes, mas ele disse que precisa pegar o 3º conjunto de caracteres, dessa forma ele precisa conhecer o que está escrito no campo, não é ??
Acho que ele vai ter que fazer a busca pela String procurando pelo 1º caracter e parar após ter por exemplo 3 espaçoes em branco. o que vc acha ??

8)[/quote]

O problema é que os dados tbm aceitam espaços em branco, o risco disso está em se existir um nome assim:

RAFAEL           ANTONIO

Bem a vida é feita de riscos :lol:, brincadeira
Ta acabando as opções acho…hehe

Cara troca esses espaços entre campos por um #, ou ;, qualquer coisa, ai fica muito fácil pra resolver isso.

public class Teste { public static void main(String[] args) { String str = "01254 RAFAEL ANTONIO RUA DOS PRAZERES 245896 6587"; String[] arr = str.split("\s\s+"); for (String s : arr) { System.out.println(s); } } }

Acredito que isto deve resolver o problema. Onde ter no minimo 2 espaços ele quebra em uma posição do Array.

[quote=neohacker]gp7junior são espaços e não TAB ??
e vc não pode garantir a quantidade de espaços ??[/quote]

abaixo segue anexo o arquivo pra uma melhor analise.




é mas como dito antes, se existir 2 ou + espaços no meio do nome já era

Não posso trocar os espaços em branco devido a uma exigencia do outro sistema. O qual não aceita alguns caracteres como o #.

Se fosse só isso.

obrigado mesmo assim

Cara pra mim este arquivo esta posicional e não sequencial como vc tinha dito, isso quer dizer que ele sempre estará no msm lugar, pelo menos foi o que eu percebi, estou errado ??

Cara seu arquivo ta por posição de caracteres, não tem nenhum segredo trabalhar com isso… já trabalhei assim… eles tem um tamanho único e quando não completam esse tamanho, preenchem de espaço em branco.
Com o substring você resolve isso molinho…

[quote=gp7junior]Mesmo com o toString(); nada acontece.

[quote]

init:
deps-jar:
compile-single:
run-single:
usando o split[Ljava.lang.String;@10b62c9
EXECUTADO COM SUCESSO (tempo total: 0 segundos)
[/quote][/quote]

O método split() retorna um array de String

[quote=leandroqbs]Cara seu arquivo ta por posição de caracteres, não tem nenhum segredo trabalhar com isso… já trabalhei assim… eles tem um tamanho único e quando não completam esse tamanho, preenchem de espaço em branco.
Com o substring você resolve isso molinho…[/quote]

Sim mas… como é que se implementa?

gostaria de um exemplo.

vlw

corretamente eles vêm em sequencia.

[quote=thingol]Se isso for um arquivo posicional (por exemplo, o endereço “Rua dos Prazeres” fica nas posições de 36 a 56), você pode usar:

0000000000111111111122222222223333333333444444444455555555556666666666
0123456789012345678901234567890123456789012345678901234567890123456789
01254      RAFAEL ANTONIO           RUA DOS PRAZERES     245896 6587
String registro = "01254      RAFAEL ANTONIO           RUA DOS PRAZERES     245896 6587";
String endereco = registro.substring (36, 56+1);

Só lembrando que em Java a primeira posição é 0.
[/quote]

É assim oras bolas…hehehe :smiley:

o método split não vai resolver, pois ele pode ter um nome composto que foi separado acidentalmente por tab… to dizendo, esse arquivo é posicional, pode usar o substring que é garantido, já trabalhei com arquivos assim…

Eu já dei o exemplo com substring (aquele com “substring (36, 56-1)” ou coisa parecida alguns posts atrás.
Agora faça a sua parte.
Pegue o arquivo que você recebeu, veja onde começam as posições, e boa sorte!

terceiroCampo = linhaArquivo.substring(posicaoInicial, posicaoFinal);

onde linhaArquivo é a linha atual (string) e as posições são inteiros fixos, basta você contar aí no seu arquivo, o número de caracteres.

Se você não entendeu por que que eu fiz isto:

 0000000000111111111122222222223333333333444444444455555555556666666666
 0123456789012345678901234567890123456789012345678901234567890123456789
01254      RAFAEL ANTONIO           RUA DOS PRAZERES     245896 6587

é que isso é um macete para descobrir onde é que começam e terminam os campos. Por exemplo, para ver onde começa e termina o campo “nome” (no caso “Rafael Antonio”), basta ver os números acima.