gpt4 book ai didi

java - 优化Java代码中的几个RegEx

转载 作者:行者123 更新时间:2023-11-30 07:29:51 25 4
gpt4 key购买 nike

下面提到的 RegEx 在非常大的字符串或超过 2000 行时表现非常差。基本上,Java String 由 PL/SQL 脚本组成。

1- 将每次出现的定界字符替换为字符前后的空格,例如 ||、!= 或 > 符号。这需要无限的时间并且永无止境,因此无法记录时间。

// Delimiting characters for SQLPlus
private static final String[] delimiters = { "\\|\\|", "=>", ":=", "!=", "<>", "<", ">", "\\(", "\\)", "!", ",", "\\+", "-", "=", "\\*", "\\|" };


for (int i = 0; i < delimiters.length; i++) {
script = script.replaceAll(delimiters[i], " " + delimiters[i] + " ");
}

2- 以下模式查找所有出现的正斜杠/除了前面有 * 的斜杠。这意味着不要在 block 注释语法中寻找正斜杠。对于 2000 行字符串,这大约需要 103 秒。

Pattern p = Pattern.compile("([^\\*])([\\/])([^\\*])");
Matcher m = p.matcher(script);
while (m.find()) {
script = script.replaceAll(m.group(2), " " + m.group(2) + " ");
}

3- 删除日期或日期格式中的所有空格

Pattern p = Pattern.compile("(?i)(\\w{1,2}) +/ +(\\w{1,2}) +/ +(\\w{2,4})");
// Create a matcher with an input string
Matcher m = p.matcher(script);
while (m.find()) {
part1 = script.substring(0, m.start());
part2 = script.substring(m.end());
script = part1 + m.group().replaceAll("[ \t]+", "") + part2;
m = p.matcher(script);
}

有什么方法可以优化所有三个 RegEx 以减少它们花费的时间吗?

谢谢

阿里

最佳答案

我会回答第一个问题。

您可以将所有这些组合到一个正则表达式替换操作中:

script = script.replaceAll("\\|\\||=>|[:!]=|<>|[<>()!,+=*|-]", " $0 ");

解释:

\|\|            # Match ||
| # or
=> # =>
| # or
[:!]= # := or !=
| # or
<> # <>
| # or
[<>()!,+=*|-] # <, >, (, ), !, comma, +, =, *, | or -

关于java - 优化Java代码中的几个RegEx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8253947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com