如何在Java中检查一个字符串是否存在于另一个字符串上,但这里的条件如下:
例如:
字符串1:Panda
String 2:">a1d22n333a4444p">
这里,字符串2需要字母"p"、"n"、"d"至少一次,"a"至少两次。图案应符合上述条件。
我已经完成了正则表达式,但我没有得到解决方案。
public static boolean isContainsAnimal(String message,String animal) {
String animalPattern=generatePattern("panda");
Pattern pattern = Pattern.compile(animalPattern);
Matcher matcher = pattern.matcher(message);
int count = 0;
while (matcher.find()) {
count++;
}
if(count>=1){
return true;
}else
{
return false;
}
}
public static String generatePattern(String animal){
String result="";
for(int i=0;i<animal.length();i++){
result+="[^"+animal.charAt(i)+"]*"+animal.charAt(i);
}
return result;
}
建议我解决这个问题。
您的尝试没有考虑animal
字符串中字符的不同可能顺序。事实上,对于一个5个不同的字符串,有5个阶乘的不同阶数。
可以生成一个正则表达式,其中所有的排序都是备用的,但结果是。。。可怕且效率低下。
一个更好的想法是计算是否有字母(如'a'
(重复。然后为每个字母生成一个正则表达式,使用"match"应用每个字母并对结果进行and运算。
一个更好的想法是根本不使用正则表达式。它们不适合这份工作。