0

我遇到了这段代码的问题:由于某种原因,它总是无法匹配代码。

for (int i = 0; i < pluginList.size(); i++) {
    System.out.println("");
    String findMe = "plugins".concat(FILE_SEPARATOR).concat(pluginList.get(i));

    Pattern pattern = Pattern.compile("("+name.getPath()+")(.*)");
    Matcher matcher = pattern.matcher(findMe);

    // Check if the current plugin matches the string.
    if (matcher.find()) {
        return !pluginListMode;
    }
}
4

2 回答 2

2

现在我们只能猜测,因为我们不知道name.getPath()会返回什么。

我怀疑它失败了,因为该字符串可能包含在正则表达式中具有特殊含义的字符。再试一次

Pattern pattern = Pattern.compile("("+Pattern.quote(name.getPath())+")(.*)");

看看会发生什么。

此外,这(.*)部分(甚至是name.getPath()结果周围的括号)似乎根本不重要,因为您没有对匹配结果本身做任何事情。在这一点上,问题是你为什么首先使用正则表达式。

于 2012-05-09T09:27:58.037 回答
2

你真正需要的是

return ("plugins"+FILE_SEPARATOR+pluginName).indexOf(name.getPath()) != -1;

但是您的代码也没有任何意义,因为该for循环无法进入第二次迭代——它无条件返回。所以更有可能你需要这样的东西:

for (String pluginName : pluginList)
  if (("plugins"+FILE_SEPARATOR+pluginName).indexOf(name.getPath()) != -1)
    return false;
return true;
于 2012-05-09T09:46:52.047 回答