检查字符串是否包含子字符串,而不使用java预定义方法

时间:2013-05-11 16:33:20

标签: java string substring

我需要查找给定的子字符串是否包含在给定的字符串中。但是约束是我不能使用任何预定义的Java方法。 我尝试过如下。

public void checkAvailability()
{
    len=st.length();
    for(int i=0;i<len;i++)
    {
        for(int j=0;j<substr.length();j++)
        {
            if(st.charAt(i)==substr.charAt(j))
            {
                if(j!=substr.length()-1 && i!=st.length()-1)
                {
                    if(st.charAt(i+1)==substr.charAt(j+1))
                    {
                        available=true;
                        //j++;
                        count++;
                    }
                }
            }
        }
    }
    if(available)
    {
        System.out.println("The character is available " + count + " times");
    }
    else
    {
        System.out.println("The character is not availabe");
    }
}

但它没有给出正确的答案。有人可以帮忙吗?

提前谢谢你......

1 个答案:

答案 0 :(得分:2)

您的代码中存在一些错误 - 我将在不编写代码的情况下描述算法,以避免破坏您的学习练习:

  • 外部循环需要从0到st.length()-substr.length()
  • 内部循环需要检查st.charAt(i+j)substr.charAt(j)
  • 一旦发现不匹配,内环就需要停止;设置不匹配标志,并打破
  • 如果内部循环完成而未发现不匹配,则i是第一次匹配的位置。

请注意,这是最直接的算法。 st很长时,它表现不佳,substr有很多“误报”。一般来说,你可以做得更好,例如,使用KMP algorithm