2015-01-16 44 views
0

我想檢查一個包含多個字符串的長字符串。Java模式包含數組中的所有字符串

我正在嘗試使用下面的命令。

  String[] words = {"GAGGAG", "AGGAC"}; 
      Pattern pattern = Pattern.compile("GAGGAG|AGGAC"); 
      if(pattern.matcher("GAGGAGGTC").find()){ 
       System.out.println("find"); 
      }else{ 
       System.out.println("Not find"); 
      } 

結果應該是沒有找到 因爲 「GAGGAGGTC」 包含 「GAGGAG」 但不包含 「AGGAC」

我怎能捨棄選項從 「或」 to 「和」

還有一個選項。

  String[] words = {"GAGGAG", "AGGAC"}; 
      Pattern pattern = Pattern.compile("GAGGAG|AGGAC"); 
      if(pattern.matcher("GAGGAGGAC").find()){ 
       System.out.println("find"); 
      }else{ 
       System.out.println("Not find"); 
      }   

這也應該顯示「找不到」。 因爲不允許重疊部分。 「GAGGAG」和「AGGAC」是重疊的「AG」的一部分,從「GAGGAGGAAC」

+1

你有沒有使用正則表達式?使用'contains'要簡單得多。 – August

+1

這可以幫助你http://stackoverflow.com/questions/469913/regular-expressions-is-there-an-and-operator – Upio

回答

1

你並不需要一個正則表達式爲目的。

使用String#contains

public boolean checkContainsAll(String sentence, String[] words) { 
    for(String word : words) { 
     if(!sentence.contains(word)) { 
      return false; 
     } 
    } 
    return true; 
} 

在您的例子:

String[] words = {"GAGGAG", "AGGAC"}; 
String sentence = "GAGGAGGTC"; 
if(checkContainsAll(sentence, words)) { 
    System.out.println("The sentence " + sentence + " contains all words"); 
} else { 
    System.out.println("The sentence " + sentence +" does not contain all words."); 
} 

DEMO


UPDATE

要檢查是否有我沒什麼重疊,在我的例子中,最簡單的解決辦法是,如果他們是在給定的句子中去除的話,那麼他們將不會爲下一次檢查存在:

public boolean checkContainsAll(String sentence, String[] words) { 
    for(String word : words) { 
     if(!sentence.contains(word)) { 
      return false; 
     } 
     sentence = sentence.replace(word, ""); 
    } 
    return true; 
} 

DEMO

+0

我我真的很抱歉,這很好,但自從乞討以來,我忘了提及不允許重疊的部分。 –

+0

因爲有重疊的部分所以我不是因爲句子「GAGGAGGTC」所以允許。但「GAGGAGNNNAGGAC」允許,因爲它不重疊 –

+0

@ clear.choi檢查我的更新 – BackSlash

0

您正則表達式改成這樣一個「和」運營商

(?=GAGGAG)(?=AGGAC) 
+0

這[不起作用(http://ideone.com/FfmIeI) – BackSlash

2

你必須需要像下面那樣使用alternation運營商|

Pattern.compile("GAGGAG.*AGGAC|AGGAC.*GAGGAG"); 

說明:

  • GAGGAG.*AGGAC匹配的GAGGAG加上.*任何字符將提出在兩者之間必須有一個AGGAC子。

  • |或運算符,以便它匹配任何順序。

  • AGGAC匹配AGGAC,.*零個或多個字符加上GAGGAG字符串。

例1:

Pattern pattern = Pattern.compile("GAGGAG.*AGGAC|AGGAC.*GAGGAG"); 
    if(pattern.matcher("GAGGAGGAC").find()){ 
     System.out.println("find"); 
    }else{ 
     System.out.println("Not find"); 
    } // Output: Not find 

例2:

Pattern pattern = Pattern.compile("GAGGAG.*AGGAC|AGGAC.*GAGGAG"); 
    if(pattern.matcher("GAGGAGAGGAC").find()){ 
     System.out.println("find"); 
    }else{ 
     System.out.println("Not find"); 
    } 
} // Output: find 

例3:

Pattern pattern = Pattern.compile("GAGGAG.*AGGAC|AGGAC.*GAGGAG"); 
    if(pattern.matcher("AGGACFOOGAGGAG").find()){ 
     System.out.println("find"); 
    }else{ 
     System.out.println("Not find"); 
    } // Output: find 
相關問題