欢迎访问宙启技术站
智能推送

Java函数实现通配符匹配

发布时间:2023-10-22 00:13:13

通配符匹配是一种常见的字符串匹配方法,通常用于模式匹配、文件搜索等场景。在Java中,可以通过使用递归函数来实现通配符匹配。下面是一个简单的示例代码实现通配符匹配:

public class WildcardMatch {
    public static boolean isMatch(String str, String pattern) {
        // 如果匹配串和目标串都为空,说明匹配成功
        if (pattern.isEmpty() && str.isEmpty()) {
            return true;
        }

        // 如果匹配串为空,而目标串不为空,说明匹配失败
        if (pattern.isEmpty()) {
            return false;
        }

        // 如果匹配串不为空,而目标串为空,那么只有匹配串全是*才能匹配成功
        if (str.isEmpty()) {
            return pattern.chars().allMatch(ch -> ch == '*');
        }

        // 如果匹配串的      个字符为*,可以匹配任意字符,递归匹配剩余部分
        if (pattern.charAt(0) == '*') {
            return isMatch(str.substring(1), pattern) || isMatch(str, pattern.substring(1));
        }

        // 如果匹配串的      个字符为?,可以匹配任意一个字符,递归匹配剩余部分
        if (pattern.charAt(0) == '?') {
            return isMatch(str.substring(1), pattern.substring(1));
        }

        // 如果匹配串的      个字符和目标串的      个字符相同,递归匹配剩余部分
        if (pattern.charAt(0) == str.charAt(0)) {
            return isMatch(str.substring(1), pattern.substring(1));
        }

        // 其他情况,匹配失败
        return false;
    }

    public static void main(String[] args) {
        String str = "abc";
        String pattern = "a*c";
        boolean matched = isMatch(str, pattern);
        System.out.println("匹配结果:" + (matched ? "匹配成功" : "匹配失败"));
    }
}

在代码中,我们使用递归的思想实现通配符匹配。首先判断匹配串和目标串是否都为空,如果是,则匹配成功,返回true。然后判断匹配串是否为空,如果是,则匹配失败,返回false。接着判断目标串是否为空,如果是,则需要判断匹配串是否全由*组成,如果是,则匹配成功,返回true;否则,匹配失败,返回false。最后,判断匹配串的 个字符是*、?还是其他情况,分别进行递归匹配剩余部分,并根据结果返回匹配结果。

示例中演示了目标串为"abc",匹配串为"a*c"的情况,该匹配串可以匹配到目标串,因为*可以匹配任意字符,所以返回结果为匹配成功。

需要注意的是,在实际应用中,通配符匹配通常还会考虑一些特殊情况,如大小写敏感、路径匹配等等。以上代码仅为简单示例,具体场景下还需要根据实际需求进行修改和扩展。