如何检查某些字符是否存在于另一个无序的字符串中?使用RegEx Java



如何在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运算。

一个更好的想法是根本不使用正则表达式。它们不适合这份工作。

最新更新