关于java:如何从字符串中获取日期和计数元素?

How to get a date and count elements from a string?

我有下面的线

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

我需要三个独立的字符串,如下所示

1
2
3
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" ;


要从字符串中获取三个部分,可以使用

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

Regular expression visualization

调试程序演示

名称是Capture Group 1,日期是2,x是3。此regex假定日期始终有效。如果您真的需要确保一个正确的日期,您可以阅读我写的关于使用regex验证数值范围的答案。

另外请注意,虽然您可以使用\d代替[0-9],但[0-9]更通用,因为\d可以在.NET中捕获非美国数字。这里和这里有更多的信息。

要获得"x"个数,只需拆分第三组,然后计算得到的数组元素:

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

试试这个

先找到日期模式(dd/mm/yyyy),然后再得到其他简单的日期模式。

1
2
3
4
5
6
7
8
9
10
    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);
    }

输出

1
2
3
Peter L. Douglas
04/02/1984
3