java正则表达式: performance and alternative

标签 java regex

最近我不得不搜索一些字符串值来查看哪个匹配某个模式。在用户输入搜索词之前,字符串值的数量和模式本身都不清楚。问题是我注意到每次我的应用程序运行以下行时:

    if (stringValue.matches (rexExPattern))
    {
        // do something so simple
    }

大约需要 40 微秒。字符串值超过几千个就不用说了,太慢了。

模式类似于:

    "A*B*C*D*E*F*"

其中 A~F 只是这里的示例,但模式与上述类似。 请注意*该模式实际上每次搜索都会改变。例如“A*B*C*”可能会更改为 W*D*G*A*”。

我想知道上面的模式是否有更好的替代方案,或者更一般地说,是 java 正则表达式的替代方案。

最佳答案

Java 中的正则表达式被编译成一个内部数据结构。这个编译是一个耗时的过程。每次调用String.matches(String regex)方法,都会重新编译指定的正则表达式。

所以你应该只编译一次你的正则表达式并重复使用它:

Pattern pattern = Pattern.compile(regexPattern);
for(String value : values) {
    Matcher matcher = pattern.matcher(value);
    if (matcher.matches()) {
        // your code here
    }
}

关于java正则表达式: performance and alternative,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19829892/

相关文章:

java - 旋转多个图像会导致闪烁。 Java 二维图形

java - 如何显示密码中的字符

java - 我如何在 C++ 的堆栈上正确添加 QTWidgets?

regex - R 中的 gsub 除外

Java SQL 语句 - 索引数组越界

java - 当浏览器调用另一台服务器时,Tomcat session 共享不起作用

ruby - 使用正则表达式匹配文本中的所有 IP 地址

javascript - 用于捕获图像 src 属性的正则表达式

java - 使用 Java Regex 限制连续字符

R - 仅用一个替换多个出现的字符。正则表达式