2012-05-09 58 views
0

我對這段代碼有問題: 由於某些原因,它總是無法匹配代碼。正則表達式not found string

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; 

但你的代碼也沒有任何意義,由於這樣的事實,有沒有辦法爲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