为了账号安全,请及时绑定邮箱和手机立即绑定

从java中的字符串中提取多个日期(dd-MMM-yyyy格式)

从java中的字符串中提取多个日期(dd-MMM-yyyy格式)

临摹微笑 2023-03-02 09:52:36
我到处搜索这个但找不到具体的解决方案,文档也没有涵盖这个。所以我想从这个字符串中提取开始日期和结束日期"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)。
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

您可以捕获两个日期,只需调用该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);

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


查看完整回答
反对 回复 2023-03-02
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

如果您的文本可能很乱,并且您确实需要使用正则表达式来提取日期范围,您可以使用


String str = "Text here 1-Mar-2019 to 31-Mar-2019 and tex there";

String startdt = "";

String enddt = "";


String date_rx = "\\d{1,2}-[a-zA-Z]{3}-\\d{4}";

Pattern p = Pattern.compile("(" + date_rx + ")\\s*to\\s*(" + date_rx + ")");  

Matcher m = p.matcher(str);

if(m.find())

{

    startdt = m.group(1); 

    enddt = m.group(2); 

}

System.out.println("startdt: "+startdt+" enddt: "+enddt);

// => startdt: 1-Mar-2019 enddt: 31-Mar-2019

请参阅Java 演示


此外,请考虑此增强功能:将日期作为整个单词进行匹配,以避免在较长的字符串中出现部分匹配:


Pattern.compile("\\b(" + date_rx + ")\\s*to\\s*(" + date_rx + ")\\b")

如果范围可以用 表示-,或者to您可以用 替换to,(?:to|-)甚至(?:to|\\p{Pd})where\p{Pd}匹配任何连字符/破折号。


查看完整回答
反对 回复 2023-03-02
?
GCT1015

TA贡献1827条经验 获得超4个赞

你可以简单地使用String::split


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

String dts [] = range.split(" ");

System.out.println(dts[0]);

System.out.println(dts[2]);


查看完整回答
反对 回复 2023-03-02
  • 3 回答
  • 0 关注
  • 280 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号