小结:使用正则表达式提取时间中的数字

Quartz任务中对于时间的设定,有一定的规则,比如:
"05 39 21 27 8 ? 2017"
从数据库取出来的时间格式不是这样的,是这样的:
2017-08-17 10:55:00
所以我们要提取其中的数字,代码如下:

// 分割符是 "-" 或 空格" " 或冒号 ":"
String time = "2017-08-17 10:55:00";
String[] times = time.split("[\\-:\\s]{1,}");

结果如下:

小结:使用正则表达式提取时间中的数字_第1张图片
image.png

对了,还需要反转,才能对上:

List timesList = Arrays.asList(times);
Collections.reverse(timesList);
times = (String[]) timesList.toArray();

如下:

小结:使用正则表达式提取时间中的数字_第2张图片
image.png

什么?还缺一个问号?
由于Arrays.asList(times);返回的是一个固定长度的List,这次要折腾一下了:

String time = "2017-08-17 10:55:00";
// 分割符是 "-" 或 空格" " 或冒号 ":"
String[] times = time.split("[\\-:\\s]{1,}");
List timesList = Arrays.asList(times);
List flexibleTimesList = new ArrayList();
flexibleTimesList.addAll(timesList);
flexibleTimesList.add(1,"?");
Collections.reverse(flexibleTimesList);
String[] resultTimes = new String[flexibleTimesList.size()];
for (String str : flexibleTimesList) {
    System.out.println(str);
}
resultTimes =  (String[]) flexibleTimesList.toArray();

打印都出来了,如下:

00
55
10
17
08
?
2017

但是走到最后一句,结果报错:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
    at com.test.hello.Main.main(Main.java:38)

为什么呢?
因为toArray()返回的是Object[] java.util.List.toArray(),强转String[]有问题。改用如下的办法:

flexibleTimesList.toArray(resultTimes);

OK了,看看结果:

小结:使用正则表达式提取时间中的数字_第3张图片
image.png

最后,别忘了转换,如下:

StringBuffer sb = new StringBuffer();
for(String str : resultTimes) {
    sb.append(str + " ");
}
// 干掉最后一个空格
time = sb.toString().substring(0, sb.length() - 1);
System.out.println("{" + time + "}");

注:StringBuffer 比StringBuilder线程安全,比String +执行效率高,用这个连接字符串最合适。

打印结果如下,多余的空格也剔除了:

{00 55 10 17 08 ? 2017}

你可能感兴趣的:(小结:使用正则表达式提取时间中的数字)