Я хочу проверить, соответствует ли каждая строка файла нескольким шаблонам регулярных выражений.
Пример: проверить эту строку моего текстового файла
123;456;789
с 3 различными выражениями
1.*;.*;..9
3.*;.*;787
.2.;.*;..9
и сделайте что-нибудь, когда шаблоны соответствуют или не соответствуют каждому.Поэтому мне нужно знать, какой из моих шаблонов соответствует или нет в этом примере: только P1 и P3 совпадают, поэтому я выполняю действие 1 и действие 3 на входе 123;456;789
Наивное решение с вложенным циклом for даетплохая производительность (из-за алгоритма).
пример:
for(String row : rows){
for (Pattern p : patterns){
if(p.matcher(value).matches()){
//
}
}
}
Я думал о встраивании нескольких регулярных выражений с помощью "|"оператор
, используя приведенный выше пример: (1.*;.*;..9)|(3.*;.*;787)|(.2.;.*;..9)
String expression = "(1.*;.*;..9)|(3.*;.*;787)|(.2.;.*;..9)";
String value = "123;456;789";
Pattern pattern = Pattern.compile(expression);
Matcher matcher = pattern.matcher(value);
HashMap<Integer,Boolean> results= new HashMap<>();
if(matcher.matches()) {
int count = matcher.groupCount();
for (int i = 1; i <= count; ++i) {
results.put(i, matcher.group(i) != null);
}
}
Но двигатель останавливается при первом подходящем варианте
Есть ли способ проверить несколько различных шаблонов водин звонок?Иначе как я могу улучшить алгоритм, не будучи квадратичным