我正面临一个两难的境地。我正在解析一个字符串,
s.matches(regex)
或者我可以
s.startsWith(..) && s.endsWith(..)
正如你已经意识到的,这不是一个复杂的正则表达式,两种情况都可以。想法是,字符串可能很长(数百个字符),所以我希望最大限度地提高效率。什么工作如何和更好地适合这个问题?
ru9i0ody1#
这里有一个相当粗糙的 * 基准测试 * 给予你一个想法。根据你的用例调整它,给你更相关的结果。
startsWith()
endsWith()
1000000次运行后的结果:第一个
xfb7svmp2#
请注意,如果结尾预期的字串是起始字串的尾码,两种方法可能会报告不同的结果:
^start.*art$
将不匹配
"start"
同时
"start".startsWith("start") && "start".endsWith("art")
都是真的。
x9ybnkn63#
事实上,对于小字符串来说,差异也很明显。使用模式的正则表达式的编译版本确实做出了一些增强,但毫无疑问,当匹配很容易时,这是最糟糕的主意。谢谢大家。
3条答案
按热度按时间ru9i0ody1#
这里有一个相当粗糙的 * 基准测试 * 给予你一个想法。根据你的用例调整它,给你更相关的结果。
TL;DR的名称
startsWith()
和endsWith()
的速度要快得多详细结果
1000000次运行后的结果:
第一个
xfb7svmp2#
请注意,如果结尾预期的字串是起始字串的尾码,两种方法可能会报告不同的结果:
将不匹配
同时
都是真的。
x9ybnkn63#
事实上,对于小字符串来说,差异也很明显。使用模式的正则表达式的编译版本确实做出了一些增强,但毫无疑问,当匹配很容易时,这是最糟糕的主意。
谢谢大家。