实际上,您可以使用正则表达式:
String s = "vendor.2012-07-25 2";
Pattern p = Pattern.compile("([^.]+)\\.(\\d{4})-(\\d{2})-(\\d{2}) ?(\\d?)");
Matcher m = p.matcher(s);
if (m.find()) {
String vendorName = m.group(1);
String year = m.group(2);
String month = m.group(3);
String day = m.group(4);
String multipleFiles = m.groupCount() > 4 ? m.group(5) : "";
System.out.printf("%s %s %s %s %s", vendorName, year, month, day, multipleFiles);
}
每个用括号包裹的表达式()
称为一个捕获组,它基本上告诉正则表达式引擎保存其内容,以便以后可以检索它。
总之,这是每个捕获组所做的事情:
([^.]+)
- 除了点 ( .
) 之外的所有内容,因此我们基本上捕获了供应商名称部分;
(\\d{4})
-\d
匹配一个数字。\d{4}
匹配4
数字(年份);
(\\d{2})
- 月;
(\\d{2})
- 天;
(\\d?)
- 匹配可选的 ( ?
) 最后一位数字。
如果要将日期部分解析为java.Util.Date
实例,可以为其使用单个捕获组,然后使用SimpleDateFormat
:
Pattern p = Pattern.compile("([^.]+)\\.(\\d{4}-\\d{2}-\\d{2}) ?(\\d?)");
Matcher m = p.matcher(s);
if (m.find()) {
String vendorName = m.group(1);
String dateString = m.group(2);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String multipleFiles = m.groupCount() > 2 ? m.group(3) : "";
}