我想检查一个包含多个字符串的长字符串。
我正在尝试使用以下命令。
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”
如何从“或”选择“和”
还有一个选择。
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");
}
这也应该显示“Not find”。 因为不允许重叠部分。 “GAGGAG”和“AGGAC”与“GAGGAGGAAC”重叠“AG”部分
答案 0 :(得分:2)
您必须使用下面的alternation
运算符|
。
Pattern.compile("GAGGAG.*AGGAC|AGGAC.*GAGGAG");
<强>解释强>
GAGGAG.*AGGAC
匹配GAGGAG
加上.*
中间任何字符,且必须有AGGAC
子字符串。
|
OR运算符,以便匹配任何订单。
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
答案 1 :(得分: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.");
}
更新
要检查没有重叠,我的示例中最简单的解决方案是删除在给定句子中找到的单词,以便下次检查时不会出现这些单词:
public boolean checkContainsAll(String sentence, String[] words) {
for(String word : words) {
if(!sentence.contains(word)) {
return false;
}
sentence = sentence.replace(word, "");
}
return true;
}
答案 2 :(得分:0)
将正则表达式更改为&#34;和&#34;操作
(?=GAGGAG)(?=AGGAC)