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

发布于 2024-04-29 23:55:06 字数 2571 浏览 34 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

夏至、离别

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文