使用正则表达式提取时间中的数字
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,}");
结果如下:
对了,还需要反转,才能对上:
List<String> timesList = Arrays.asList(times);
Collections.reverse(timesList);
times = (String[]) timesList.toArray();
如下:
什么?还缺一个问号?
由于 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 了,看看结果:
最后,别忘了转换,如下:
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}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论