正则表达式 VS 包含。最佳性能?[已关闭]
我想在Java中的不同模式上比较URI字符串,并且我想要最快的代码。
我应该使用 :
if(uri.contains("/br/fab") || uri.contains("/br/err") || uri.contains("/br/sts")
或类似的东西:
if(uri.matches(".*/br/(fab|err|sts).*"))
请注意,我可以拥有更多的uri,并且经常调用此方法。
在我的选择之间,最好的答案是什么?
我想在Java中的不同模式上比较URI字符串,并且我想要最快的代码。
我应该使用 :
if(uri.contains("/br/fab") || uri.contains("/br/err") || uri.contains("/br/sts")
或类似的东西:
if(uri.matches(".*/br/(fab|err|sts).*"))
请注意,我可以拥有更多的uri,并且经常调用此方法。
在我的选择之间,最好的答案是什么?
如果要使用正则表达式,请预先创建它并重用同一对象:Pattern
private static final Pattern pattern = Pattern.compile(".*/br/(fab|err|sts).*");
你真的需要两端的“.*”吗?如果您使用.,我不希望它需要它。Matcher.find()
哪个更快?找出答案的最简单方法是根据一些样本数据进行测量 - 尽可能真实的样本。(最快的解决方案很可能取决于
你已经确定这是一个瓶颈吗?如果你已经对代码进行了足够的测量,发现它是一个瓶颈,我很惊讶你还没有尝试过这两种方法。如果您尚未验证这是一个问题,那么在担心“最快的代码”之前,这是要做的第一件事。
如果这不是瓶颈,我个人会选择非正则表达式版本,除非你是正则表达式瘾君子。正则表达式非常强大,但也很容易出错。
我已经完成了一个测试,使用包含更快。正如伊万·托德(Ewan Todd)所说,他们俩的速度都足够快,不会真正为此烦恼。