java - 正则表达式 VS 包含。最棒的表演?

标签 java regex

我想在 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/

相关文章:

java - 如果执行新日期(0L),则纪元不是纪元。为什么?

java - 为什么没有 OutOfMemoryError

javascript - 使用正则表达式将最后一个逗号分隔值替换为另一个值

javascript - 如何检查左大括号的数量是否等于右大括号的数量?

Java 正则表达式 : [^(\\s? -\\s?)]。 's' 上的 PatternSyntaxException ?

javascript - 为什么使用正则表达式验证行效果很好,而验证字符串却失败?

java - 使用递归和通配符 (*) 在文件中搜索

java - 忙碌的等待, sleep 和准确性

java - 语法错误: Unexpected token ILLEGAL in Node Javascript

python - 如何获取仅匹配和包含部分的正则表达式匹配索引?