Java正则表达式:性能和替代

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

    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正则表达式:性能和替代 的全部内容, 来源链接: utcz.com/qa/417078.html

回到顶部