Pesquisa em Texto (String)

6 respostas
V

Tenho um texto em uma string qualquer, gostaria de saber a posição de onde existem datas neste texto!
Alguém pode me dar uma luz nisso!

valeu

6 Respostas

V

Use expressões regulares:
http://guia-er.sourceforge.net/


http://java.sun.com/docs/books/tutorial/essential/regex/

T

viniciuspadua:
Tenho um texto em uma string qualquer, gostaria de saber a posição de onde existem datas neste texto!
Alguém pode me dar uma luz nisso!

valeu

O que é uma data para você? Defina corretamente o que você quer achar, para ficar fácil de criar uma expressão regular para o seu caso. Você quer achar sequências de 2 ou 3 números, separados por “/”? Você quer achar datas por extenso (como “28 de fevereiro”?) O que é uma data para você?

Atenção: expressões regulares são péssimas para achar coisas com limitações do tipo “achar, 28/02 mas não 31/02 porque 31/02 é uma data inválida”. (Eu sei que isso é possível mas as expressões regulares resultantes ficam extremamente complexas, lentas e incompreensíveis).

Em vez disso, ache todas as coisas que se parecem com datas usando as expressões regulares, mas deixe para fazer essa validação em Java mesmo. É mais simples e o seu programa é mais fácil de manter.

M

Para a validação a classe SimpleDateFormat deve ajudar.

V

quero isso, imagine o texto (String)!

06/11/2009 primeiro dia 07/11/2009 segundo dia 09/11/2009 terceiro dia 20/11/2009 último dia.

quero fazer um split pelas datas, pois necessito salvar as datas separadamente!

T

Cara, tenta assim:

Pattern pattern = Pattern
				.compile("[0-9]{2}+[//]+[0-9]{2}+[//]+[0-9]{4}");

 Matcher matcher = pattern
				.matcher("06/11/2009 primeiro dia 07/11/2009 segundo dia 09/11/2009 terceiro dia 20/11/2009 último dia.");

  while (matcher.find()) {
			System.out.println(matcher.group());
  }

Essa Expressão regular pode e deve ser melhorada, afim de evitar alguns erros (como mês 00, mês > 12, dia 00 e > 31, etc).
De qualquer modo faça como o pessoal sugeriu, valide a data depois dela ter sido extraída.

Abraços.

M
import java.text.DateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DateFilter {

	private static final Pattern PATTERN = Pattern
			.compile("[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}");
	private static final DateFormat FORMAT = DateFormat.getDateInstance();

	static {
		FORMAT.setLenient(false);
	}

	public static void main(String[] args) {
		System.out.println(getValidDates("1/2/2000 06/11/2009 primeiro dia 07/11/2009"
						+ " segundo dia 09/11/2009 terceiro dia 20/11/2009 último dia."));

	}

	public static List<Date> getValidDates(String text) {
		List<Date> validDates = new ArrayList<Date>();
		Matcher matcher = PATTERN.matcher(text);
		while (matcher.find()) {
			try {
				validDates.add(FORMAT.parse(matcher.group()));
			} catch (ParseException e) {
				// invalid date
			}
		}
		return validDates;
	}

}
Criado 7 de março de 2010
Ultima resposta 8 de mar. de 2010
Respostas 6
Participantes 5