为什么Java中大多数字符串 *** 作都基于regexp?

为什么Java中大多数字符串 *** 作都基于regexp?,第1张

为什么Java中大多数字符串 *** 作都基于regexp?

请注意,无需每次都重新编译正则表达式。从Javadoc:

这种形式的方法的调用

str.split(regex, n)
产生与表达式相同的结果

Pattern.compile(regex).split(str, n)

也就是说,如果您担心性能,则可以预编译模式,然后重用它:

Pattern p = Pattern.compile(regex);...String[] tokens1 = p.split(str1); String[] tokens2 = p.split(str2); ...

代替

String[] tokens1 = str1.split(regex);String[] tokens2 = str2.split(regex);...

我相信进行此API设计的主要原因是方便。由于正则表达式也包括所有“固定”字符串/字符,因此它简化了API使用一种方法而不是几种方法的方法。而且,如果有人担心性能,则仍可以如上所述对正则表达式进行预编译。

我的感觉(我无法获得任何统计证据支持)是,大多数情况

String.split()
是在性能不成问题的情况下使用的。例如,这是一次性的 *** 作,或者与其他因素相比,性能差异可以忽略不计。在紧密循环中使用同一个正则表达式数千次拆分字符串的情况下,IMO很少出现,性能优化确实有意义。

有趣的是,将具有固定字符串/字符的正则表达式匹配器实现的性能与专用于它们的匹配器的性能进行比较。差异可能不足以证明单独的实现是正确的。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5142381.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存