我有一个脚本(Java String),其中包含很多 SQL 和 SQL 运算符,例如 <>(不等于)、++(增量运算符)、:=(赋值运算符),但默认情况下所有这些都包含单个或者它们之间有多个空格,例如<>将是<>,类似地++可以像++一样,它们之间有多个空格。
我编写了一个简单的正则表达式来删除下面提到的空格。对于小型脚本,没有问题,但对于较大的脚本,需要很长时间,有时需要 20-30 秒。
你能发现这个程序有什么问题并建议我更好的吗?
p = Pattern.compile("(: +=|! +=|- +-|< +>|> +=|< +=|\\+ +=|\\'|\\/ +\\*|\\* +\\/|\\| +\\||\\< +\\<|\\> +\\>)");
m = p.matcher(script);
while (m.find()) {
script = script.replace(m.group(), m.group().replaceAll(" +", ""));
}
请建议我如何减少时间。
谢谢
最佳答案
我担心带有联合的长正则表达式对匹配器来说有点困难。为什么不采用像这样更简单的解决方案:
str = str.replace(":( +)=", ":=");
str = str.replace("!( +)=", "!=");
str = str.replace("-( +)-", "--");
//... etc
它会更清晰并且应该更快。
关于Java RegEx 模式花费太多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7767590/