我想从一组字符串中检索日期和其他时间实体。这是否可以在不解析 JAVA 中的日期字符串的情况下完成,因为大多数解析器处理的输入模式范围有限。但是输入是一个手动输入,因此在这里是模棱两可的。
输入可以是这样的:
12th Sep |mid-March |12.September.2013
Sep 12th |12th September| 2013
Sept 13 |12th, September |12th,Feb,2013
我看过很多关于在 Java 中查找日期的答案,但大多数答案都没有涉及如此广泛的输入模式。
我已经尝试使用 SimpleDateFormat
类并使用一些 parse() 函数来检查解析函数是否中断,这意味着它不是日期。我试过使用 regex
但我不确定它是否适合这种情况。我也用过 ClearNLP注释日期,但它没有提供可靠的注释集。
获取这些值的最接近方法可能是使用下面提到的责任链
。是否有一个库具有一组日期模式。也许我可以使用它?
最佳答案
解决这个问题的一种简洁和模块化的方法是使用链, 链中的每个元素都试图将输入字符串与正则表达式进行匹配, 如果正则表达式与输入字符串匹配,那么您可以将输入字符串转换为可以提供 SimpleDateFormat 的内容,以将其转换为您喜欢的数据结构(日期?或更适合您需要的不同时间表示)并返回它,如果regexp 不匹配链元素,只是委托(delegate)给链中的下一个元素。
链中每个元素的职责只是针对字符串测试正则表达式,给出结果或要求链中的下一个元素试一试。
可以轻松创建和组合链,而无需更改链中每个元素的实现。
最终结果与@KirkoR 的响应相同,代码多了“一点”(:D),但采用了模块化方法。 (我更喜欢正则表达式方法而不是 try/catch 方法)
一些引用:https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern
关于java - 如何从文本中检索各种日期和时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33098511/