1、功能概述
实现通过正则法则,来提取一个文本里面包含的时间
2、实现思路
1)编写适合筛选格式的正交法则
如图实现 * 年 * 月 * 日的筛选
//****年**月**日 ****年*月*日 的格式,我们可以更改不同筛选规则,进行不同格式筛选
pattern = Pattern.compile("((([0-9]{4})年([0-9]{2}|[1-9]))月([0-9]{2}|[1-9]))日"); //尝试提取这样类型的数据
matcher = pattern.matcher(content);
System.out.println("查找 年 月 日 ");
/**
while (matcher.find()) {
str_ymd = matcher.group(); //查找到所有
}
*/
if (matcher.find()) { //判断文本是否找到符合规则字符串,并提取
System.out.println("找到了");
str_ymd = matcher.group(0);
System.out.println("找到符合筛选规则的数据:" + str_ymd);
}
2)对符合筛选规格的数据进行截取判断,是否是否和年月日的日期规则
截取年月日
year = Integer.parseInt(str_ymd.substring(0, str_ymd.lastIndexOf("年"))); //截取年之前字符串,并转化 int
month = Integer.parseInt(str_ymd.substring(str_ymd.indexOf("年") + 1, str_ymd.lastIndexOf("月"))); //截取 年 月 之间字符串,并转化 int
day = Integer.parseInt(str_ymd.substring(str_ymd.indexOf("月") + 1, str_ymd.lastIndexOf("日"))); //截取 月 日 之间字符串 , 并转化 int
进行判断:
//将筛选到的数据进行判断,是否符合日期
private void judgeData(int year, int month,int day) {
boolean isLeapYear = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
System.out.println(year + "年是闰年!");
isLeapYear = true;
} else {
System.out.println(year + "年是平年!");
isLeapYear = false;
}
if ((0<month && month <=12)) { //判断月份
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if ((0<day && day <=31)){
showDataTime(); //显示出来
}
break;
case 4:
case 6:
case 9:
case 11:
if ((0<day && day <=30)){
showDataTime(); //显示出来
}
break;
case 2:
if (isLeapYear && (0<day && day<=29)){
showDataTime(str_split);
} else if (0<day && day<=28){
showDataTime(显示出来);
}
break;
default:
System.out.println("日期 时间出错");
break;
}
} else{
System.out.println("月份 时间出错");
}
}
同样的道理,大家也可以,筛选 年月 , 时分秒 等不同格式和样式的时间串,具有很好的延展性。
文献参考:
时间日期的正则
https://blog.csdn.net/zhanghaisong_2015/article/details/78423597