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