第一个月
如何使用java regex获取HH:MM:SS(01:12:22),因此输出应为01:12:22我使用了以下代码,但它不起作用
System.out.println("Hello, World!");
String time = "Thu Dec 22 01:12:22 UTC 2022";
String pattren = "(?:2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]";
Pattern p = Pattern.compile(pattren);
Matcher m = p.matcher(time);
System.out.println("h");
while (m.find()) {
System.out.println(m.group(1));
}
4条答案
按热度按时间lokaqttq1#
Regex不是适合您要求的工具
正如anubhava和Basil Bourque所建议的,这里使用的最佳工具是日期时间API。
01:12:00
,则LocalTime#toString
的默认实现会删除尾随的:00
。在这种情况下,您还需要一个格式化程序来格式化时间。从**Trail: Date Time**了解有关现代日期-时间API的更多信息。
new9mtju2#
不像Basil suggested那样简单(KISS),而是使用 * Java的Time API * 详细说明Ole的评论:
使用解析器和临时查询的步骤
使用
java.time.format.DateTimeFormatter.parse()
方法:图纸:
运行demo on IDEone。
快捷方式
直接使用方法
parse(CharSequence text, TemporalQuery<T> query)
:另请参见
Java文档:
TemporalQueries
,各种预定义查询,例如LocalTime
TemporalQuery
,说明查询的工作原理xmjla07d3#
正则表达式在这里是矫枉过正。
一个月
你可以简单地用空格字符分割字符串,然后取第四段文本,用索引3访问第四段文本。
看这个code run at Ideone.com。
01时12分22秒
或者,对于commented,可以将整个字符串解析为一个 * java. time * 对象,然后提取
LocalTime
,有关此方法,请参见Answer by Arvind Kumar Avinash和Answer by hc_dev。bq3bfh9z4#
如前所述回答问题。
正如OP问题的第一个注解所指出的,对group的调用存在问题,模式中没有索引为1的组。
当运行代码时,java告诉你同样的事情:
因此,无论是没有参数(如第四只鸟所建议的),还是参数为0(如下所示),代码都能正常工作: