Упомянутый ниже 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- Следующий шаблон ищет все вхождения прямой косой черты / кроме тех, которым предшествует *.Это означает, что не ищите косую черту в синтаксисе блочных комментариев.Это займет около 103 секунд для 2000 строк строки.
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, чтобы они занимали меньше времени?
Спасибо
Али