Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Apaxe

Decompor String

Mensagens Recomendadas

Apaxe

Possuo a seguinte String:

PSB 09:45
15659 PSB-15701 AVO-Resv.-(TR)-Resv.-27401 OVA-15803 PSB
PSB 18:23

Na String necessito de ignorar a primeira e terceira linha.

Na linha do meio, tenho de capturar todos os valores numéricos juntamente com os três caracteres que lhe ficam imediatamente a seguir. Em função do valor numérico e dos três caracteres lidos, tenho que consultar uma base de dados a fim de adicionar junto ao valor numérico entre [] uma dada hora. Exemplo:

15659[12:25] PSB

No final, após ter adicionado as horas, tenho de manter toda a formatação da String, ou seja, as três linhas.

Alguém me pode ajudar a criar este algoritmo?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
iron

Porque não divides a string por " ".

String str = "a b c";

String[] st = str.split(" ")

E vais trabalhando as secções que queres

Editado por iron

Cumprimentos,
iron

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
vildor

Acrescentando ao que o iron disse,

//Split por linhas

String[] linhas = str.split("\n");

//Assumindo sempre o mesmo formato da linha 2

String[] pares = linhas[1].split("-");

//Para cada par em pares, split e realizar operacao de concatenacao. Guardar tudo numa nova string.

String output = "";

for(String par : pares){

//Par numero:tres letras. Falta as verificacoes de quando não é um numero seguido de tres letras ;)

String[] p = par.split(" ");

output+=p[0]+stringComAData+p[1];

}

Editado por vildor

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tiago.f

Olá,

podes também fazer uma substituição usando expressões regulares:

linha.replaceAll("(\\d+)\\s*([a-zA-Z]+)","$1[hh:mm] $2");

Cumps

EDIT: substitui a parte hh:mm pelas horas e minutos, claro!

EDIT2: testei aqui http://www.regexplanet.com/advanced/java/index.html

e com o input:

PSB 09:45
15659 PSB-15701 AVO-Resv.-(TR)-Resv.-27401 OVA-15803 PSB
PSB 18:23

devolveu

PSB 09:45
15659[hh:mm] PSB-15701[hh:mm] AVO-Resv.-(TR)-Resv.-27401[hh:mm] OVA-15803[hh:mm] PSB
PSB 18:23

... parece-me correcto. Confirma, claro!

Editado por tiago.f

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Apaxe

tiago.f,

A tua lógica funcionou, mas continuo com o seguinte problema: A tua expressão regular adiciona a String [hh:mm] em todos os valores numéricos, mas agora o problema é que cada valor numérico vai possuir uma hora diferente!

Podias-me ajudar a alterar a tua expressão regular para ser inserida num ciclo que compara cada valor numérico a fim de decidir qual das horas deva ser inserida?

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tiago.f

Ah, se precisas de procurar os valores numéricos numa BD e colocar a hora encontrada, então esquece a minha solução.

Usa as outras colocadas aqui...

EDIT: e peço desculpa, só li bem agora o teu post inicial. Tinha-me escapado a parte da BD...

Editado por tiago.f

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.