跳过Java if语句

mjr*_*mjr 4 java recursion if-statement

下面的方法接受一个字符串和一个模式,如果它们相互匹配则返回true.一个 '.' 匹配1个字符,'*'匹配0或更多(例如,expMatch("abc", "a.c")应该返回true).我添加了一堆打印语句来查看我出错的地方,似乎if语句被跳过了,即使是str.length() == 1.

我叫它 System.out.println(expMatch("abc", "a*c"));

这是代码:

public static boolean expMatch(String str, String pat)
{   
    if (str.charAt(0) == pat.charAt(0) || pat.charAt(0) == '.')
    {
        System.out.println("in if");
        System.out.println(str.charAt(0));
        System.out.println(pat.charAt(0));
        System.out.println(str.length());
        if (str.length() == 1)
            return true;
        expMatch(str.substring(1), pat.substring(1));
    }

    else if (pat.charAt(0) == '*')
    {   
        System.out.println("in else");
        System.out.println(str.charAt(0));
        System.out.println(pat.charAt(0));
        if (str.length() == 1)
            return true;
        if (str.charAt(0) == pat.charAt(1)) //val of * = 0
            expMatch(str, pat.substring(1));
        else if (str.charAt(1) ==pat.charAt(1))
            expMatch(str.substring(1), pat.substring(1));           
    }

    return false;           
}
Run Code Online (Sandbox Code Playgroud)

输出是:

in if
a
a
3
in else
b
*
in if
c
c
1
false
Run Code Online (Sandbox Code Playgroud)

即使长度为1,它也会跳过if?知道为什么吗?PS我不是在寻找解决方案,只是为什么要跳过if语句.

小智 6

你总是从最后的方法返回false.您以递归方式调用expmatch但从不使用返回值.代码进入第一个if,recurses(因为length不是1)并且在返回时将转到返回false的最终return语句.