首页 > 解决方案 > 从java中的字符串中提取多个日期(dd-MMM-yyyy格式)

问题描述

我到处搜索,但找不到具体的解决方案,文档也没有涵盖这一点。所以我想从这个字符串中提取开始日期和结束日期"1-Mar-2019 to 31-Mar-2019"。问题是我无法提取两个日期字符串。

我在这里找到了最接近的解决方案,但由于声誉低下,无法发表评论询问如何单独提取值:https ://stackoverflow.com/a/8116229/10735227

我正在使用正则表达式模式来查找出现并首先将两个出现提取到 2 个字符串。
这是我尝试过的:

Pattern p = Pattern.compile("(\\d{1,2}-[a-zA-Z]{3}-\\d{4})");  
Matcher m = p.matcher(str);
while(m.find())
{
    startdt = m.group(1); 
    enddt = m.group(1);   //I think this is wrong, don't know how to fix it
}
System.out.println("startdt: "+startdt+" enddt: "+enddt);

输出是:

startdt: 31-Mar-2019 enddt: 31-Mar-2019

此外,我需要使用 DateFormatter 将字符串转换为日期(如果需要,在单个数字日期之前添加尾随 0)。

标签: javaregexstringdate

解决方案


您可以捕获两个日期,只需调用该find方法两次,如果您只有一个,这只会捕获第一个:

String str = "1-Mar-2019 to 31-Mar-2019";

String startdt = null, enddt = null;

Pattern p = Pattern.compile("(\\d{1,2}-[a-zA-Z]{3}-\\d{4})");  
Matcher m = p.matcher(str);
if(m.find()) {
    startdt = m.group(1); 
    if(m.find()) {
       enddt = m.group(1);
    }
}   
System.out.println("startdt: "+startdt+" enddt: "+enddt);

请注意,这可以与 awhile(m.find())和 a一起使用,List<String以便能够提取您可以找到的每个日期。


推荐阅读