2011-11-25 61 views
0

當我實現我的代碼中的正則表達式我有問題......正則表達式不工作java.util.regex。*;

我給它一個快速的解釋......我有收到一個字符串,以檢查是否該字符串包含的元素的功能一個ArrayList(這些元素可以是一個或多個單詞)。如果它不包含列表中的任何元素,則返回將其寫入文件,否則將被忽略。首先,我做了以下內容:

private boolean containDiscontinuedWord(String query) { 
Matcher matcher; 
Pattern pattern; 
    for (String blackL : blackList) { 
     pattern = Pattern.compile("\\b" + blackL + "\\b"); 
     matcher = pattern.matcher(query); 
      while(matcher.find()) { 
       return true; 
      } 
    } 
    return false; 
} 

我這裏的問題是,當我運行一個Linux環境下的應用程序(JVM 1.5安裝),那麼沒有什麼是寫入文件...但它在Windows下不環境。我的應用程序使用1.6兼容1.5版本構建。

所以我做了以下內容:

private boolean containDiscontinuedWord(String query) { 
    for (String blackL : blackList) { 
     if(query.matches(".*\\b(" + blackL + ")\\b.*")){ 
      return true; 
     } 
    } 
    return false; 
} 

而這個功能工作得很好,但沒有「*」我的正則表達式的...但我需要使用的精確匹配,但它再次在Windows環境下運行良好。我已經在很多方面對這個問題進行了搜索,但我找不到解決這個問題的東西,我不知道我的正則表達式是不正確的還是可以是......我希望你們可以給我一個線索!

我很抱歉,如果這是一個愚蠢的問題,但非常感謝您的閱讀!

+2

是否已確認這是在'containDiscontinuedWord'的問題,而不是位,用於寫入文件? –

+0

聽起來就像戴夫牛頓所說的,你很可能正在看錯地方。 –

+0

在使用正則表達式之前,我使用的是contains();但例如 字符串查詢=「這是我最喜歡的筆記本電腦」;並且在ArrayList中是「最喜歡的筆記本電腦」元素,那麼它將無法工作,但如果只是「最喜歡的」或「筆記本電腦」。包含工作正常,但只有當只有一個詞找到... – seas

回答

0

您確實需要調查indexOf。您構建正則表達式的方式已經非常容易出錯(請考慮引用)。另外,你不明白「匹配」和「搜索」與正則表達式之間的區別。

+0

是啊我知道indexOf()似乎是唯一的出路,但我不能找到任何答案,以幫助爲什麼find()不會在所有這就是爲什麼我調整match()函數與正則表達式,但正如我所說,它只工作沒有*,謝謝。 – seas