实际上,您可以使用正则表达式:
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) : "";
}