java中的数据模式分析
我的要求是分析给定的日期并找出其模式,如下所示: 2014年12月21日-年月日 21.12.14-年月日 21-6-14-年月日 2014/12/15-yyyy/mm/dd 诸如此类 那么,我的方法应该是什么?为什么:java中的数据模式分析,java,regex,date,simpledateformat,Java,Regex,Date,Simpledateformat,我的要求是分析给定的日期并找出其模式,如下所示: 2014年12月21日-年月日 21.12.14-年月日 21-6-14-年月日 2014/12/15-yyyy/mm/dd 诸如此类 那么,我的方法应该是什么?为什么: 使用正则表达式验证日期,然后打印模式 或 使用SimpleDataFormat解析日期,然后打印模式 欢迎使用任何其他方法。您可以使用以下方法: Pattern pattern = Pattern.compile("\\b(\\d+)([-./])\\d{1,2}\\2(\\d
欢迎使用任何其他方法。您可以使用以下方法:
Pattern pattern = Pattern.compile("\\b(\\d+)([-./])\\d{1,2}\\2(\\d{2}(?:\\d{2})?)");
String date = "21/12/2014";
Matcher matcher = pattern.matcher(date);
matcher.find();
boolean dayFirst = matcher.group(1).length() == 2;
boolean fourCharYear = true;
String separator = matcher.group(2);
String dateFormat = "1sepMMsep2".replace("sep", separator);
if(dayFirst) {
dateFormat = dateFormat.replace("1", "dd").replace("2", "y");
fourCharYear = matcher.group(3).length() == 4;
} else {
dateFormat = dateFormat.replace("2", "dd").replace("1", "y");
}
if(fourCharYear) {
dateFormat = dateFormat.replace("y", "yyyy");
} else {
dateFormat = dateFormat.replace("y", "yy");
}
SimpleDateFormat format = new SimpleDateFormat(dateFormat);
Date parse = format.parse(date);
它基于以下假设:
-
、
或/
我猜你在扼杀你的思维能力。你可以想出你自己的解决办法,这对你真的很有帮助。你要买别人的主意,所以。。2011年4月2日的格式是什么?它可以是所有的排列。。。你需要一些边界约束。如果你有可能从源代码中获取信息,他们正在创建什么格式,这是最好的开始方式。将所有边缘情况视为
01-02-03
->01.Feb.2003、02.Jan.2003、03.Feb.2001,…第一个3年的简单方法\d{2}[/.-]\d{1,2}[/.-]\d{2,4}
我有自己的解决方案,那就是使用regex,然后打印模式。我也想过解析日期,但时间越来越长了。因此,我怀疑在使用日期解析器时是否有任何与性能相关的改进。或者任何其他性能得到提高,代码也减少的解决方案。