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

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,}");

结果如下:

image.png

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

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

如下:

image.png

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

String time = "2017-08-17 10:55:00";
// 分割符是 "-" 或 空格" " 或冒号 ":"
String[] times = time.split("[\\-:\\s]{1,}");
List<String> timesList = Arrays.asList(times);
List<String> flexibleTimesList = new ArrayList<String>();
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了,看看结果:

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}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 传送门 解读阿里Java开发手册(v1.1.1) - 异常日志 前言 阿里Java开发手册谈不上圣经,但确实是大量...
    kelgon阅读 4,385评论 4 50
  • 集合框架: 1)特点:存储对象;长度可变;存储对象的类型可不同2)Collection(1)List:有序的;元素...
    Demo_Yang阅读 1,286评论 0 4
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,518评论 0 3
  • 赤血长殷 ‌壹 1937年底。 “号外号外,中日交战中国再度失利,南京沦陷...
    Lpederve阅读 542评论 0 2