Java RegEx Pattern花费了太多时间

时间:2011-10-14 12:29:44

标签: java regex delay

我有一个脚本(Java String),其中包含许多SQL和SQL运算符,如<>(不等于),++(增量运算符),:=(赋值运算符)但默认情况下都是在它们之间包含单个或多个空格用于示例<>将< >,类似++可能像+ +,它们之间有多个空格。

我写了一个简单的RegEx来删除下面提到的空格。对于小脚本,没有问题,但对于较大的脚本,它需要很多时间,有时需要20-30秒。

你能看到这个程序有什么问题并建议我更好的东西吗?

p = Pattern.compile("(: +=|! +=|- +-|< +>|> +=|< +=|\\+ +=|\\'|\\/ +\\*|\\* +\\/|\\| +\\||\\< +\\<|\\> +\\>)");
m = p.matcher(script);

while (m.find()) {
    script = script.replace(m.group(), m.group().replaceAll(" +", ""));
}

请建议我如何减少时间。

由于

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用String.replace(CharSequence, CharSequence)

答案 1 :(得分:1)

我担心与工会的长期正面关系在匹配器上有点难。为什么不是这样一个更简单的解决方案:

str = str.replace(":( +)=", ":=");
str = str.replace("!( +)=", "!=");
str = str.replace("-( +)-", "--");
//... etc

它会更清晰,更快。