递归以检查String是否等于另一个字符串

时间:2016-03-20 08:59:22

标签: java string recursion

我当前的代码返回输出:

true
Expected: true

false
Expected: true

false
Expected: true

false
Expected: false

false
Expected: false 

所以我的逻辑存在问题,我没有看到

public static void main(String[] args)
{

    System.out.println(find("",""));
    System.out.println("Expected: true\n");

    System.out.println(find("Mitten","Mit"));
    System.out.println("Expected: true\n");
    System.out.println(find("I love my CS courses!"," CS"));
    System.out.println("Expected: true\n");
    System.out.println(find("","Cookies."));
    System.out.println("Expected: false\n");
    System.out.println(find("Java","Python"));
    System.out.println("Expected: false\n");


}
public static boolean find(String text, String str)
{

    boolean found = false;
    if(text.length() == 0 && str.length() == 0)
    {
        found = true;
        return found; 
    }
    if(text.length() == 0 || str.length() == 0)
    {
        return found; 
    }
    if(str.length() > text.length())
    {
        return found;
    }
    if(str.equals(text.substring(0,str.length()-1))) 
    {
        found = true;   
    }
    else
    {
        text = text.substring(1);
        find(text, str);
    }
    return found;
}

请帮助

1 个答案:

答案 0 :(得分:7)

我发现此声明存在问题

if(str.equals(text.substring(0,str.length()-1))) 

由于substring的第二个索引是独占的,所以它应该是

if(str.equals(text.substring(0,str.length()))) 

strstr.length的第一个text字符进行比较。

当然,您可以使用text.contains(str)text.startsWith(str)并删除部分代码,但这可能不是练习要求的一部分。

除了这个问题,当你进行递归调用时,你通常应该对该调用返回的值做一些事情:

found = find(text, str);

否则,为什么要首先进行递归调用? (除非它具有将作为参数传递的对象变为递归调用的副作用,在您的情况下不会这样做)