gpt4 book ai didi

java - 正则表达式模式匹配的 CPU 利用率高

转载 作者:行者123 更新时间:2023-11-30 03:09:00 28 4
gpt4 key购买 nike

我正在使用 Java 中的字符串模式匹配。我有一个问题,当尝试匹配模式时,CPU 变高并且不执行任何操作。我有 100 个字符串,需要检查它是否与 2 个模式匹配。

下面是我正在使用的示例代码。当第一个字符串 (patternList) 与模式 2 匹配时(即,patternMatch[1]),它会停止并且 CPU 达到 100%。我怎样才能让这个变得更好?

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;");
}

}

最佳答案

您似乎面临着 catastrophic backtracking 的变体可能是由 ([\\w\\s]+)+ 引起的。尝试使用 ([\\w\\s]+) 代替

String[] patternMatch = {
"([\\w\\s]+)([+\\-/*])+([\\w\\s]+)",
"([\\w\\s]+)([+\\-/*])+([\\w\\s]+)([+\\-/*])+([\\w\\s]+)"
};

关于java - 正则表达式模式匹配的 CPU 利用率高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34032350/

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