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
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
Use expressões regulares:
http://guia-er.sourceforge.net/
http://java.sun.com/docs/books/tutorial/essential/regex/
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.
Para a validação a classe SimpleDateFormat deve ajudar.
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!
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.
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;
}
}