Я использую сопоставление шаблонов для строки в Java. У меня проблема, процессор идет высоко и ничего не делает при попытке сопоставить шаблоны. У меня есть строка 100, которую нужно проверить, если она соответствует двум шаблонам.Высокое использование ЦП на соответствие шаблону Regex
Ниже приведен пример кода, который я использую. Он останавливается, и процессор переходит на 100% для первой строки (patternList), когда сопоставляет ее для шаблона 2 i.e patternMatch [1]. Как я могу сделать это лучше?
String[] patternMatch = {"([\\w\\s]+)+([+\\-/*])+([\\w\\s]+)",
"([\\w\\s]+)+([+\\-/*])+([\\w\\s]+)+([+\\-/*])+([\\w\\s]+)"};
List<String> patternList = new ArrayList<String>();
patternList.add("Avg Volume Units product A + Volume Units product A");
patternList.add("Avg Volume Units/Volume Units product A");
patternList.add("Avg retailer On Hand/Volume Units Plan/Store Count");
patternList.add("Avg Hand Volume Units Plan Store Count");
patternList.add("1 - Avg merchant Volume Units");
patternList.add("Total retailer shipment Count");
for (String s :patternList){
for(int i=0;i<patternMatch.length;i++){
Pattern pattern = Pattern.compile(patternMatch[i]);
Matcher matcher = pattern.matcher(s);
System.out.println(s);
if (matcher.matches()) {
System.out.println("Passed");
}else
System.out.println("Failed;");
}
}
Что точки '([ \\ ш \\ S] +) + '? Почему бы не '([\\ w \\ s] +)'? – Pshemo
Почему вы перекомпилируете шаблоны каждый раз? Скомпилируйте их один раз за пределами цикла. –