2012-05-09 25 views
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; 
    } 
} 
+1

問題を示す短いしかし完全なプログラムを提供してください。ああ、読みやすくするために、return文の部分を 'return!pluginListMode;'に変更してください。 –

答えて

2

あなたが本当に必要なのは

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

あるしかし、あなたのコードはまた、2回目の反復を入力することfor -loopための方法がないという事実にも意味がありません - それは無条件に返します。だから、おそらくあなたはこのようなものが必要です:

for (String pluginName : pluginList) 
    if (("plugins"+FILE_SEPARATOR+pluginName).indexOf(name.getPath()) != -1) 
    return false; 
return true; 
2

name.getPath()が返すものがわからないので、今すぐ推測できます。

文字列に正規表現の中で特別な意味を持つ文字が含まれている可能性があると私は思っています。

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

でもう一度試してみてください。

また、(.*)の部分(およびあなたのname.getPath()の結果の周りの括弧も)は、マッチの結果で何もしていないため、全く問題にはなりません。あなたが最初に正規表現を使用している理由は、その点です。

+0

正規表現を取得できませんでした。 私はあなたが提案したものを試しましたが、何も動作していないようです。 私はこれを解決するために以下のオプションを使用しましたが、とにかく感謝します。 – Domenic

関連する問題