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

本当に必要なのは

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

forただし、そのループが2番目の反復に入る方法がないため、コードも意味がありません。無条件に返されます。したがって、おそらく次のようなものが必要です。

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

今のところ、何が返ってくるかわからないので、推測することしかできませんname.getPath()

その文字列には正規表現内で特別な意味を持つ文字が含まれている可能性があるため、失敗したと思われます。でもう一度お試しください

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

そして、その後何が起こるかを見てください。

また、試合自体の結果については何もしていないので、その(.*)部分(および結果を囲む括弧でさえname.getPath())はまったく重要ではないように見えます。その時点での問題は、そもそもなぜ正規表現を使用しているのかということです。

于 2012-05-09T09:27:58.037 に答える