2014-04-06 94 views
1

我有以下字符串如何從字符串中獲取日期和計數元素?

String str1 = "Peter L. Douglas 04/02/1984 X1 X5 YY" ; 

我需要得到三個不同的字符串如下

String str1_name = "Peter L. Douglas" ; 
String str1_date = "04/02/1984" ; 
String str1_nbr = "3" ;  // 3 is three elements after date , i.e. X1 X5 YY 

我不知道我怎麼能以最有效的方式做到這一點,經過特別計算的元素日期


其他可能的字符串是

String str1 = "Alexander Evanston 05/02/1986 X5 YY" ;

+0

什麼是你的字符串的實際模式?尾隨元素是否總是兩個字符?你沒有提供足夠的信息。 –

回答

3

若要從您的字符串的三個部分,你可以使用

^([A-Za-z. ]+) ((?:[0-9]{2}/){2}[0-9]{4}) (.*)$ 

Regular expression visualization

Debuggex Demo

名稱是爲捕獲組1,2日,這個正則表達式假定日期總是有效的。如果你真的需要確保一個適當的日期,你可以閱讀我寫的關於使用regex來驗證數字範圍的this answer

同時還要注意,你可以代替[0-9]使用\d[0-9]較爲普遍,如\d可以在.NET例如捕捉非美國數字。更多信息herehere


要獲得的「X」片,剛拆組三,數,然後計算得到的數組元素:

int xPieceCount = matcher.group(3).split(" ").length(); 
2

試試這個

找到日期模式(DD/MM/YYYY),然後讓其他人儘可能簡單。

String str1 = "Peter L. Douglas 04/02/1984 X1 X5 YY"; 
    Pattern pt = Pattern.compile("\\d\\d/\\d\\d/\\d\\d\\d\\d"); 

    Matcher m = pt.matcher(str1); 

    if (m.find()) { 
     System.out.println(str1.substring(0, m.start()).trim()); 
     System.out.println(m.group()); 
     System.out.println(str1.substring(m.end()).trim().split("\\s+").length); 
    } 

輸出

Peter L. Douglas 
04/02/1984 
3 
+0

有趣的想法將邏輯錨定在單個日期 - 正則表達式上。 +1 – aliteralmind