Regex - Pescar Linha Inteira

4 respostas
S

Alguém conhece alguma forma de pegar uma linha inteira de um arquivo, dado uma palavra existente nesta linha?

Algo mais ou menos parecido com aquele comando “grep” do unix?

Por exemplo:

(Arquivo.txt)
Linha Um…
Descrição: Quero esta linha inteira.
Linha Três…

Daí utilizando Pattern e Matcher (ou outra API), ao procurar por “Descrição”, recuperar a frase inteira da linha 2?

Ou se houver outras estratégias que alcance esta mesma finalidade, fico aberto a sugestões.

4 Respostas

A

Tente isso:

String data = "Linha Um...\nDescrição: Quero esta linha inteira.\nLinha Três...";
		
		String pattern = "[\\n]*[\\.]*Descrição[\\.]*";
		
		Pattern p = Pattern.compile(pattern);
		
		Matcher m = p.matcher(data);
		
		while (m.find()) {			
			int start = m.start();			
			String subString = data.substring(0, start + 1);
			int lastLineDelimiter = subString.lastIndexOf("\n");
			String tempString;
			
			try {
				tempString = data.substring(lastLineDelimiter + 1, data.indexOf("\n", lastLineDelimiter + 1));
			} catch (StringIndexOutOfBoundsException ex) {
				tempString = data.substring(lastLineDelimiter + 1);
			}
			
			System.out.println(tempString);
			
			
		}

Com certeza devem existir algoritmos melhores, mas é uma possibilidade.

[]´s

S

obrigado asaudate, serviu aos meus propósitos, exceto por um outro problema:

a impressão no console da IDE aparece formatado corretamente, com quebra de linhas, por exemplo:

Descrição: Quero esta linha inteira.
Descrição: Quero esta linha inteira também.
Descrição: Quero esta também.

ao fazer o PrintWriter, pw.write(tempString), para escrever no arquivo, sai tudo junto, sem nenhuma quebra de linha. E a critério de diagnóstico, nem mostra o “\n” (que não deveria mostrar mesmo), por exemplo:

(Arquivo.txt)
Descrição: Quero esta linha inteira.Descrição: Quero esta linha inteira também.Descrição: Quero esta também.

ainda não consegui decifrar o motivo.

E

O PrintWriter tem um método chamado println.

S

lol é isso mesmo… aliás foi por causa do println() que eu preferi usar o PrintWriter, e no final das contas acabei usando o write() =s

agora foi, obrigado!

Criado 22 de agosto de 2010
Ultima resposta 23 de ago. de 2010
Respostas 4
Participantes 3