检查一个字符串是否包含在另一个字符串时的StackOverflow

时间:2014-03-11 06:24:46

标签: java string substring stack-overflow

我目前有一个方法应该接受两个字符串,然后检查一个字符串是否作为其他字符串存在。它不会检查两种方式,因此我将字符串传递给方法的方式决定了在另一方中查找的字符串。

目前我收到 stackoverflow 错误。

public boolean checkMatch(String text, String regex, int i){

    int regexL = regex.length();

        if(i == regexL){
            return true;
        }   

        System.out.println(text.charAt(i) + " " + regex.charAt(i));

        if(text.charAt(i) == regex.charAt(i)){
            return checkMatch(text, regex, i++);
        }
        else if(text.charAt(i) != regex.charAt(i)){

            if(text.substring(1) == ""){
                return false;
            }               
            else if(text.substring(1) != ""){
                return checkMatch(text.substring(1), regex, 0);
            }
        }
        return false;

}

我正在使用我的名字作为例子进行测试。

@Test public void test_52() {
    assertEquals(true, checkMatch("Samual", "mu", 0));
}

控制台在溢出后看起来像这样。

S m

a m

m m

m m

m m

我哪里错了?我错了吗?堆栈跟踪显示它似乎陷入了这条线。

return checkMatch(text, regex, i++);

但缺陷点很少是失败的原因。对不起文本和代码的墙。

3 个答案:

答案 0 :(得分:9)

我不知道其余部分是否正确,但这里有一个错误:i++在评估之后递增i。每次调用具有相同值的函数。你的意思可能是++i

答案 1 :(得分:3)

你有:

return checkMatch(text, regex, i++);

你的意思是:

return checkMatch(text, regex, ++i);

或者:

return checkMatch(text, regex, i + 1);

i++的问题在增量之前有后增量评估为i ,所以你只是在没有推进i的情况下陷入困境,并且最终递归溢出了堆栈。

如果在调试输出中打印i,问题可能会更清楚。

答案 2 :(得分:0)

您可以使用indexOf方法:

 System.out.println("Samual".indexOf("mu") > 0);

输出:

true