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

时间:2018-11-20 13:58:11

标签: java regex pattern-matching match regular-language

如何检查Java中另一个字符串上是否存在一个字符串,但是这里的条件如下:

例如:
    字串1:熊猫
字符串2:“ a 1 d 22 n 333 a 4444 p ” < / p>

在这里,字符串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;
}

建议我为此问题提供解决方案。

1 个答案:

答案 0 :(得分:1)

您的尝试未考虑animal字符串中字符的不同可能顺序。实际上,对于5个不同的字符串,有5个阶乘不同的顺序。

可以生成所有顺序都为备用的正则表达式,但是结果是……可怕而低效的。

一个更好的主意是找出是否存在重复的字母(例如'a')。然后为每个字母生成一个正则表达式,使用“匹配”将每个字母与结果相加。

一个更好的主意是根本不使用正则表达式。他们是这项工作的错误工具。