我想在 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()
,我不希望它是必需的。
哪个更快?找出答案的最简单方法是根据一些样本数据来衡量它 - 使用尽可能真实的样本。 (最快的解决方案很可能取决于
您确定这是一个瓶颈吗?如果您已经对代码进行了足够的测量以发现它是一个瓶颈,我很惊讶您还没有尝试过两者。如果您还没有验证这是一个问题,那么在担心“可能的最快代码”之前首先要做的就是这样做。
如果它不是瓶颈,我个人会选择非正则表达式版本,除非你是一个正则表达式迷。正则表达式很强大,但也很容易出错。
关于java - 正则表达式 VS 包含。最棒的表演?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2023792/