正则表达式 VS 包含。最佳性能?[已关闭]

2022-09-01 10:38:41

我想在Java中的不同模式上比较URI字符串,并且我想要最快的代码。

我应该使用 :

if(uri.contains("/br/fab") || uri.contains("/br/err") || uri.contains("/br/sts")

或类似的东西:

if(uri.matches(".*/br/(fab|err|sts).*"))

请注意,我可以拥有更多的uri,并且经常调用此方法。

在我的选择之间,最好的答案是什么?


答案 1

如果要使用正则表达式,请预先创建它并重用同一对象:Pattern

private static final Pattern pattern = Pattern.compile(".*/br/(fab|err|sts).*");

你真的需要两端的“.*”吗?如果您使用.,我不希望它需要它。Matcher.find()

哪个更快?找出答案的最简单方法是根据一些样本数据进行测量 - 尽可能真实的样本。(最快的解决方案很可能取决于

你已经确定这是一个瓶颈吗?如果你已经对代码进行了足够的测量,发现它是一个瓶颈,我很惊讶你还没有尝试过这两种方法。如果您尚未验证这是一个问题,那么在担心“最快的代码”之前,这是要做的第一件事。

如果这不是瓶颈,我个人会选择非正则表达式版本,除非你是正则表达式瘾君子。正则表达式非常强大,但也很容易出错。


答案 2

我已经完成了一个测试,使用包含更快。正如伊万·托德(Ewan Todd)所说,他们俩的速度都足够快,不会真正为此烦恼。