English 中文(简体)
Regex 捕捉群集与使用日期分割比较,哪个更好?
原标题:Regex capture groups vs. using split on dates, which is better?

在多种情况下,我发现自己需要捕捉日期格式格式的“day”部分: “YYYYYY/DD/MM” <我的问题是,用捕捉组对只按“ /” 分裂键和只按数组中的第二个项目使用正则是否是一个更好的想法?

功能上我意识到 双方都得到相同的结果。

记忆方面, 我意识到他们都使用引擎盖下面的regex引擎, 在多数情况下, 我只是在阅读日值后丢弃阵列, 使用拆分 。 但在技术上, 我读了 < code> match 对象之后也做了同样的事情 。 我想看看有没有角落案例和权衡我应该认为我不是? (除了可读性... “ split” 明显赢... )

===EDIT=== API-wise I m limited to Groovy 1.5.0 for silly legacy reasons.

为了澄清主控技术解决方案:

def nowCal = Calendar.instance 
def currentDay = nowCal.get(Calendar.DAY_OF_MONTH)
最佳回答

在格罗维,你可以做:

def date =  2012/05/25 

assert 25 == Date.parse(  yyyy/MM/dd , date )[ Calendar.DAY_OF_MONTH ]

对于Groovy 1. 5.0, 这将(作为一项功能包装):

int getDay( String date, String format= yyyy/MM/dd  ) {
  Calendar.instance.with {
    time = new java.text.SimpleDateFormat( format ).parse( date )
    get( Calendar.DAY_OF_MONTH )
  }
}

def date =  2012/05/25 
assert 25 == getDay( date )
问题回答

如果其格式总是相同的, 我就会使用字符串的子字符串方法来拉出你想要的。 REGEX 每次使用时都必须进行解析 。

如果您使用 DateFormat, 使用字符串格式设置DateFormat, 然后为 Date 对象进行分析, 该代码更有意义 。 表现明智, 可能比您的方法管理更多 。

However, I want to point out that:
If you can trust the input String, then you can use whatever you want to get the result.
If you cannot, then just use DateFormat to parse the date string.

在此情况下, 您应该选择产生最可读和最可维持的代码的解决方案, 所以我会选择 < code>.split 方法, 而不是常规表达式方法 。

考虑下行几个月的时间和日期更改的格式。 这意味着您必须对正则表达式稍作修改。 虽然这也许不是一件艰巨的任务, 但对于一个接触常规表达式有限的人来说,这也许不是那么简单。

在此情况下, .split ("/") ("/"/"/"/")

如果您需要用最少的资源来做, 请考虑使用字符串# indexof 和字符串# substring。 还需要指出的是, 做一个基准将有助于您做出正确的决定 。

我认为使用正方言在这件事上非常简洁, 并传达你只对中间部分感兴趣, 拆分版本比较难读, 因为您不知道有多少元素分开返回, 除非您将其编码为注释 。

简单的 Regex 方法或分割方法都不会给您一个适当的日期验证。 对于它, 尝试使用 DateFormat 的剖析功能。 这可能是最慢的 。

在注注注 Java 标签时,难道不能将