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