我有以下字符串
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}) (.*)$
名称是捕获组1,日期在2,“X”在3中。此正则表达式假定日期始终有效。如果您确实需要确保正确的日期,可以阅读this answer我写的关于使用正则表达式来验证数值范围的信息。
另请注意,虽然您可以使用\d
代替[0-9]
,但[0-9]
更为通用,因为\d
可以捕获.NET中的非美国数字,例如。更多信息here和here。
要获取“X”个数,只需将第三组拆分,然后计算结果数组元素:
int xPieceCount = matcher.group(3).split(" ").length();
答案 1 :(得分: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