Java 模式包含数组中的所有字符串
Java pattern contain all strings in the array
我想检查一个长字符串是否包含多个字符串。
我正在尝试使用以下命令。
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"
我怎样才能将选项从 "or" 改为 "And"
还有一个选项。
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" 部分重叠
将 "and" 运算符的正则表达式更改为此
(?=GAGGAG)(?=AGGAC)
为此您不需要正则表达式。
使用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;
}
您必须像下面那样使用 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
我想检查一个长字符串是否包含多个字符串。
我正在尝试使用以下命令。
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"
我怎样才能将选项从 "or" 改为 "And"
还有一个选项。
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" 部分重叠将 "and" 运算符的正则表达式更改为此
(?=GAGGAG)(?=AGGAC)
为此您不需要正则表达式。
使用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;
}
您必须像下面那样使用 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