亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從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 關注
  • 270 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號