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

标签 java regex string date

我到处搜索过这个问题,但找不到具体的解决方案,而且文档也没有涵盖这个问题。所以我想从此字符串“1-Mar-2019 到 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)。

最佳答案

您只需调用 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()) 一起使用和一个 List<String能够提取您能找到的每个日期。

关于java - 从java中的字符串中提取多个日期(dd-MMM-yyyy格式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56848346/

相关文章:

Java 干净的字符串?

postgresql - 我正在尝试为 postgresql 编写一个函数来进行一些字符串操作

c - 如何在不知道长度的情况下初始化 C 中的字符串,并继续向其附加字符?

java - 使用 HashMap 和数组组织锻炼信息

java - 运行另一个程序但保留 stdout/stderr

python - 如何使用 reg.compile 匹配文本的精确单词

regex - RegEx 语言的 PowerShell 文档

javascript - 正则表达式\S*导致 "JavaScript heap out of memory"

java - 如何在 Gradle 中的 JUnit 平台中进行两组测试

java - 如何在不重启服务器的情况下编译单个/多个java文件?是否有相同的 Eclipse 插件?