Como faço para retirar de um texto, uma parte dele que está entre 2 palavras a partir de uma palavra chave? Vou explicar com um passo a passo:
Tenho um texto (já em uma String)
achei a palavraChave
a partir da palavraChave eu ando pra trás no texto e encontro a palavraInicio
a partir da palavraChave eu ando pra frente e encontro a palavraFim
Então, pego desde a palavraIncio até a palavraFim e formo minha String
Até que na munheca da pra fazer, mas vai dá um trabalhão danado. Tava pensando em separar as palavras usando o tokenizer, contar as palavras, qndo achar a do meio, daí voltava e marcava a posição da palavra Inicio, depois a posição da palavraFim e depois juntava tudo, mas acho que vai ficar uma gambiarra danada. Algum método que ajudaria a fazer isso?
Em vez de utilizar StringTokenizer, utilize o método substring da classe String.
Pra usar a substring eu teria já que ter as palavras pré-definidas nao?
O problema é que quando eu achar a palavra do meio, eu tenho que ir voltando no texto até eu achar a primeira ocorrencia, pois podem ter várias, mas tem que ser a primeira que eu achar antes da palavra chave. Um exemplo pra demonstar melhor.
" fim inicio eu estou com dificuldade em separar um trecho de um inicio texto, inicio, nao sei como fazer PALAVRACHAVE, mas vou conseguir, fim, vou tentar fim até conseguir fim fim inicio fim!!!
Então, acho a PALAVRACHAVE, achei? sim, ando pra trás até achar o primeiro inicio, depois vou pra frente até achar o primeiro fim, ficando o resultado:
inicio, nao sei como fazer PALAVRACHAVE, mas vou conseguir, fim
O que exatamente você precisa fazer?
0.o, existem quantos ViniGodoy aqui no GUJ?? véi, se tá em todos os posts, uahauhauhauah.
Preciso pegar um trecho em um texto a partir de uma busca, achei o nome?, então, tenho que separar esse trecho que está para tras e para frente desse nome encontrado, mas o problema é que podem existir varias ocorrencias iguais no texto.
Exemplo
nome: joao, idade: 31. nome: ViniGodoy idade: 33. nome: lucas, idade: 31. nome: maria, idade: 51
Eu busco por lucas, achei? sim, então eu tenho que achar a primeira palavra “nome:” que vier antes de lucas e a primeira palavra idade que vier depois de lucas, tendo como resultado:
nome: lucas, idade: 31
O 31 depois de idade eu me viro pra ele fazer parte do resultado. Esse texto foi só um exemplo do que quero fazer.
Use o método split da classe String, vai resolver seu problema rapidinho.
Vou dar uma pesquisada nisso, valeu pela dica
O que eu faria é fazer parse de tudo antes, e guardar numa estrutura mais eficiente, como um map. Muitas vezes é mais fácil fazer o parse completo, do que tentar fazer sob demanda.
A menos, claro, que o arquivo seja muito grande.
como usaria o parse nisso? e map? dá uma dica ae :-), parse nun é pra transformar de um tipo pra outro? 0.o
Parque é quebrar uma string em tokens, como você já está fazendo.
Eu só falei que provavelmente é mais fácil quebrar a String inteira, e move-la para alguma estrutura mais conveniente. Pode ser um map, ou uma classe sua. Mas algo que não precise que você fique quebrando essa String toda hora.
Tava pensando em quebrar essa string e guardar em uma List, porque aí vou ter a posição de cada palavra, depois procuro pelas palavras, pego as posições e junto depois em uma string da posição x até posição y.
Tava achando meio estranho isso, meio gambiarrado, mas tá ruim dessa forma ou tá aceitável?
Por que não quebra assim:
nome: joao, idade: 31
nome: ViniGodoy idade: 33
nome: lucas, idade: 31
nome: maria, idade: 51
?
Ou talvez até assim:
joao-31
ViniGodoy-33
lucas-31
maria-51
Se o dado de entrada for organizado, tiver um formato previsível como nesse exemplo, então dá para facilmente pegar o que quer usando expressão regular:
[code]String frase = "nome: joao, idade: 31. nome: ViniGodoy idade: 33. nome: lucas, idade: 31. nome: maria, idade: 51 ";
String nomeBuscado = “lucas”;
Pattern p = Pattern.compile(“nome:\s+” + nomeBuscado + “\W*idade:\s?\d+”);
Matcher m = p.matcher(frase);
if (m.find()) {
System.out.println(m.group());
} else {
System.out.println(“Não encontrado”);
}[/code]
Não é organizado, esse aí foi só um exemplo