Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从字符串中获取日期和计数元素?_Java_Regex - Fatal编程技术网

Java 如何从字符串中获取日期和计数元素?

Java 如何从字符串中获取日期和计数元素?,java,regex,Java,Regex,我有以下字符串 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 =   "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”

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

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

名称为捕获组1,日期为2,“X”片段为3。此正则表达式假定日期始终有效。如果您确实需要确保正确的日期,您可以阅读我写的关于使用正则表达式验证数字范围的文章

还请注意,虽然您可以使用
\d
代替
[0-9]
[0-9]
更通用,例如
\d
可以在.NET中捕获非美国数字。更多信息和信息


要获得“X”块的数量,只需拆分第三组,然后计算得到的数组元素:

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

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

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

名称为捕获组1,日期为2,“X”片段为3。此正则表达式假定日期始终有效。如果您确实需要确保正确的日期,您可以阅读我写的关于使用正则表达式验证数字范围的文章

还请注意,虽然您可以使用
\d
代替
[0-9]
[0-9]
更通用,例如
\d
可以在.NET中捕获非美国数字。更多信息和信息


要获得“X”块的数量,只需拆分第三组,然后计算得到的数组元素:

int xPieceCount = matcher.group(3).split(" ").length();
试试这个

首先找到日期模式(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
试试这个

首先找到日期模式(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

您的字符串的实际模式是什么?尾随元素是否总是两个字符?您没有提供足够的信息。字符串的实际模式是什么?尾随元素是否总是两个字符?您没有提供足够的信息。将逻辑锚定在单个日期正则表达式上是一个有趣的想法+1将逻辑锚定在单个日期正则表达式上的有趣想法+1.