java中的数据模式分析

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

我的要求是分析给定的日期并找出其模式,如下所示:

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{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);
    
    它基于以下假设:

  • 第一个数字组是日期或年份,如果年份位于第一位,则年份将始终为4个字符
  • 分隔符将始终为
    -
    /
  • 这个月总是排在第二位
  • 年末的年份总是四位数或两位数

  • 我猜你在扼杀你的思维能力。你可以想出你自己的解决办法,这对你真的很有帮助。你要买别人的主意,所以。。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,然后打印模式。我也想过解析日期,但时间越来越长了。因此,我怀疑在使用日期解析器时是否有任何与性能相关的改进。或者任何其他性能得到提高,代码也减少的解决方案。