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

48 respostas
gp7junior
String string = "01254      RAFAEL ANTONIO           RUA DOS PRAZERES     [telefone removido]";

Qual método usar pra se pegar o conteudo “RUA DOS PRAZERES”. ?

48 Respostas

erickcellani

pela informação fornecida até agora:

substring(int, int);

:smiley:

Examples:

"hamburger".substring(4, 8) returns "urge"
 "smiles".substring(1, 5) returns "mile"

http://java.sun.com/j2se/1.5.0/docs/api/

neohacker

Arquivo posicional ??
Essa informação sempre estará começando no msm lugar e terminando no msm lugar :?:

gp7junior

erickcellani:
pela informação fornecida até agora:

substring(int, int);

:smiley:

Examples:

"hamburger".substring(4, 8) returns "urge"
 "smiles".substring(1, 5) returns "mile"

http://java.sun.com/j2se/1.5.0/docs/api/

Não é bem isso que eu estou procurando.

suponha que a String é a seguinte:

"01254              RAFAEL ANTONIO                    RUA DOS PRAZERES           245896                            6587"

Eu gostaria de pegar o nome “RUA DOS PRAZERES”.

entenderam agora?

erickcellani

gp7junior:
String string = "01254 RAFAEL ANTONIO RUA DOS PRAZERES [telefone removido]";

Qual método usar pra se pegar o conteudo “RUA DOS PRAZERES”. ?

q String mais esquisita cara… ela vai ser assim mesmo???

thiago.correa

Caso a resposta a pergunta que o colega aí de cima fez seja positiva, você pode dar um split usando o delimitador (o que me parece ser um tab ‘\t’) e na possição x do vetor estaria o que você quer!

gp7junior

neohacker:
Arquivo posicional ??
Essa informação sempre estará começando no msm lugar e terminando no msm lugar :?:

8)

sim eh sequencial

marciocamurati

Então, como citado pelo thiago.correa caso não seje um [tab] você poderia usar uma regular expression para “mapear” essa sua string e retornar oque você precisa.

[]s

gp7junior

erickcellani:
gp7junior:
String string = "01254 RAFAEL ANTONIO RUA DOS PRAZERES [telefone removido]";

Qual método usar pra se pegar o conteudo “RUA DOS PRAZERES”. ?

q String mais esquisita cara… ela vai ser assim mesmo???

Sim pois ela vem de um arquivo externo no formato .txt gerado a partir de um outro sistema.

gp7junior

marciocamurati:
Então, como citado pelo thiago.correa caso não seje um [tab] você poderia usar uma regular expression para “mapear” essa sua string e retornar oque você precisa.

[]s

Essa regular expression possui algum método que retorne a terceira sequencia de caracteres por exemplo?

Luiz_Aguiar

Sempre será com esses espaços/tabs separando os campos?
poderia colocar algum caracter tbm, pode usar o split pra trabalhar com delimitadores.
http://java.sun.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String)

gp7junior

Luiz Aguiar:
Sempre será com esses espaços/tabs separando os campos?
poderia colocar algum caracter tbm, pode usar o split pra trabalhar com delimitadores.
http://java.sun.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String)

Voce poderia me mostrar como ficaria isso em linhas de codigos?

tentei fazer da seguinte maneira mas nao funcionou:

public static void main(String[] args) {
        // TODO code application logic here
        
        String string = "01254      RAFAEL ANTONIO           RUA DOS PRAZERES     [telefone removido]";
        System.out.println("usando o split"+string.split("/t"));
        
    }
Y
gp7junior:
Luiz Aguiar:
Sempre será com esses espaços/tabs separando os campos? poderia colocar algum caracter tbm, pode usar o split pra trabalhar com delimitadores. http://java.sun.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String)

Voce poderia me mostrar como ficaria isso em linhas de codigos?

tentei fazer da seguinte maneira mas nao funcionou:

public static void main(String[] args) {
        // TODO code application logic here
        
        String string = "01254      RAFAEL ANTONIO           RUA DOS PRAZERES     [telefone removido]";
        System.out.println("usando o split"+string.split("/t"));
        
    }

É "\t" ao invés de "/t"

T

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     [telefone removido]
String registro = "01254      RAFAEL ANTONIO           RUA DOS PRAZERES     [telefone removido]";
String endereco = registro.substring (36, 56+1);

Só lembrando que em Java a primeira posição é 0.

gp7junior
Yky Mattshawn:
gp7junior:
Luiz Aguiar:
Sempre será com esses espaços/tabs separando os campos? poderia colocar algum caracter tbm, pode usar o split pra trabalhar com delimitadores. http://java.sun.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String)

Voce poderia me mostrar como ficaria isso em linhas de codigos?

tentei fazer da seguinte maneira mas nao funcionou:

public static void main(String[] args) {
        // TODO code application logic here
        
        String string = "01254      RAFAEL ANTONIO           RUA DOS PRAZERES     [telefone removido]";
        System.out.println("usando o split"+string.split("/t"));
        
    }

É "\t" ao invés de "/t"

tentei fazer como vc disse, mas descobri que o erro nao esta na barra.

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

gp7junior

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     [telefone removido]
String registro = "01254      RAFAEL ANTONIO           RUA DOS PRAZERES     [telefone removido]";
String endereco = registro.substring (36, 56+1);

Só lembrando que em Java a primeira posição é 0.

veja bem, nem sempre vem certinho na posição correta.

O unico padrao aqui é a ordem em que aparecem os campos.

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 :slight_smile:

gp7junior

Mesmo com o toString(); nada acontece.

silva.fernandes

Talvez isso resolva …

String str = "01254 RAFAEL ANTONIO RUA DOS PRAZERES [telefone removido]"; Pattern findString = Pattern.compile("RAFAEL ANTONIO"); Matcher m = findString.matcher(str); while(m.find()){ System.out.println(m.group()); }

Mas como o Tingol disse… se for arquivo posicional, ou seja, se a informação que você quiser esteja sempre na mesma posição o melhor é usar o método substring() da Classe String.

Falowww

peerless

Isso necessariamente depende de uma caractere CONSTANTE para fazer a divisão. No caso poderia ser o ESPAÇO, SE o dado não aceitasse também. Então, imagino que o separador é o TAB, e ele sempre está lá, certo?

Raciocine:

Split na string, com o argumento da caracter do TAB. Se não me engano, é a posição 9 da tabela ASCII.

Onde:

o seu       texto              rua dos prazeres

Ficaria:

variavel[0] = o seu variavel[1] = texto variavel[2] = rua dos prazeres

E ai, limparia esta variavel na posição 2:

variavel[2] = variavel[2].trim().replace(      ,"");

E por ai.

Abraços

gp7junior

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 :)

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 + …

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 ??

neohacker

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

peerless

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)

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

RAFAEL           ANTONIO
neohacker

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

Luiz_Aguiar

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

Flasoft

public class Teste { public static void main(String[] args) { String str = "01254 RAFAEL ANTONIO RUA DOS PRAZERES [telefone removido]"; 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.

gp7junior

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

abaixo segue anexo o arquivo pra uma melhor analise.




Flasoft

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

gp7junior

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

neohacker

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 ??

L

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…

ramilani12

gp7junior:
Mesmo com o toString(); nada acontece.

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

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

gp7junior

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…

Sim mas… como é que se implementa?

gostaria de um exemplo.

vlw

gp7junior

corretamente eles vêm em sequencia.

neohacker

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     [telefone removido]
String registro = "01254      RAFAEL ANTONIO           RUA DOS PRAZERES     [telefone removido]";
String endereco = registro.substring (36, 56+1);

Só lembrando que em Java a primeira posição é 0.

É assim oras bolas…hehehe :smiley:

L

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…

T

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!

L

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.

T

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

0000000000111111111122222222223333333333444444444455555555556666666666
 0123456789012345678901234567890123456789012345678901234567890123456789
01254      RAFAEL ANTONIO           RUA DOS PRAZERES     [telefone removido]

é 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.

lina

Oi,
não a nada que uma analise léxica (teoria) não resolva…
percorra seu texto por caracter, e onde você escontrar espaços mande quebra a linha
ou então gravar em uma variavel do espaço até a posição inicial (assim você tera 1 constante).
continue incrementando e passe para o proximo caracter, se for espaço continue incrementando ou quebrando… até encontrar a proxima letra… dai vai achar outro espaço… guarde a constante (da posicao do caracter atual até seu proximo espaço)…
assim você tera todas as “constantes” gravadas e sabera com uma comparação qual você deseja…
é trabalhoso… bem mais do que uma simples substring… mais nao tem erro…

Tchauzin!

gp7junior

thingol:
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!

corretamente. Se quiserem ver o resultado executem:

public static void main(String[] args) {
        // TODO code application logic here
        
        String string1 = "010001963                       91522  91522  JOSE FRANCISCO DO NASCIMENTO                                                              F   195263 SSPAL        [telefone removido]   BELO MONTE                              319            57040000JACINTINHO          MACEIO              AL29061955   3202415                3202147                                                                                                                                                                     M     00      9                                                                                                                                                                                                                                                                                                                                                                         0703200714032002S";
        String string2 = "010005283                       91522  91522  ABELARDO RAMOS DOS SANTOS                                                                 F   418016 SSP/AL       [telefone removido]   R.PROFªNOEMIA G.RAMALHO-QD: A           30   CASA :09  57033000JACARECICA          MACEIO              AL15121958   2317545                                       99914634                                                                                                                                             M     04      9                                                                                                                                                                                                                                                                                                                                                                         0703200708092005S";

        for (int i = 0; i<string1.length(); i++){
            System.out.println("i1 = "+i+" | "+string1.charAt(i));
        }
        
        for (int i = 0; i><string2.length(); i++){
            System.out.println("i2 = "+i+" | "+string2.charAt(i));
        }
    }

fuciona. geralmente o nome aparece na posição 46. e o endereço na posição 174.

vlw e obrigado a todos.>

L

Lina,

agora me diz… e se tem um um nome composto?

lina

Oi,
poisé… ai complica… posicaoatual+1 =P

ao chegar no caracter espaço, fazer uma verificação se o próximo caracter é uma letra. se sim… ela se torna uma constante…

LINA FERREIRA (CONSTANTE)

só faria isso no primeiro espaço que encontrar…
agora… se tiver 2 espaços e o sobrenome… já é outra coisa =P

Tchauzin!

lina

tá…
admito… tá meia furada a logica
hahahahahaha
só pensar formas pra funcionar x)

kissdemon

Cara,

pelo que vi as opções estão acabando mesmo. Resta vc pedir para enviarem pra vc o txt com algum delimitador padrão ou que alterem o sistema que gera esse txt para que assim o faça rsss.

[]´s

gp7junior

Bem se é pra ter uma resposta definitiva ai vai:

Se vcs observarem as telas em que eu mandei o arquivo, ou as duas linhas do arquivo que mandei na minha ultima mensagem. E executarem o método main da mensagem.

Poderão então perceber que se torna trivial a resolução desse problema.
Uma vez que o campo endereço aparece sempre na´posição 174 do vetor de char que é a nossa linda String.

Dando uma olhada mais minuciosa ainda verao que o proximo campo aparece sempre na posição 214.

Notem também que o campo nome vem na posição 36.

Ou seja:

*Pra pegar o endereço eu vou da posição 174 até a posição 214.
*O resto da implementação fica a critério de cada um. Seja esse por meio de substring ou por meio de ciclos de iterações.

Obrigado a todos que ajudaram

L

foi como eu disse, o pessoal fez muita festa pruma coisa tao simples, qdo vc colocou o arquivo eu vi de cara q era delimitado por tamanho…

neohacker

Mas se vc acompanhou a discusão no começo, o gp7junior disse q o arquivo era sequencial e não posicional, por isso demoramos pra ter outras idéias, após ele mostrar o arquivo concluimos que era de outra forma (muitoooo mais simples)

Criado 9 de maio de 2007
Ultima resposta 10 de mai. de 2007
Respostas 48
Participantes 15