【问题标题】:Check whether string contains sub string, without using the java predefined methods检查字符串是否包含子字符串,不使用java预定义的方法
【发布时间】:2013-05-06 03:35:38
【问题描述】:

我需要查找给定的子字符串是否包含在给定的字符串中。但约束是我不能使用任何预定义的 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");
    }
}

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

提前谢谢你...

【问题讨论】:

  • 答案在什么方面不正确?你能给我们举几个例子吗?
  • 输入字符串:QWERTYQWERTYQWFDS 输入子字符串:QWE 字符可用 3.0 次 这是上面给定输入的输出。

标签: java string substring


【解决方案1】:

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

  • 外循环需要从0到st.length()-substr.length()
  • 内循环需要检查st.charAt(i+j)substr.charAt(j)
  • 一旦发现不匹配,内循环需要停止;设置不匹配标志,然后中断
  • 如果内部循环完成后没有发现不匹配,则i 是第一个匹配的位置。

请注意,这是最直接的算法。当st 很长并且substr 有很多“误报”时,它表现不佳。通常,您可以做得更好,例如,使用KMP algorithm

【讨论】:

  • public void checkAvailability() { len=st.length(); for(int i=0;i
  • 你是这么说的吗?但我没有得到解决方案。
  • @Dini88 这更好,但不太正确:第一个if 应该检查不等式!=,不应该有第二个if。看一看:link.
  • 效果很好..谢谢。你能告诉我一种方法来获取子字符串在字符串中包含的次数吗?
  • @Dini88 有两种方法可以回答这个问题。考虑一个示例:xx 包含多少次 xxxxxx?答案 3 和 5 都是正确的:答案 3 计算不重叠的子字符串,即当每个字符只能是一个匹配项的一部分时;答案 5 允许重叠。对于有重叠的答案,增加一个计数器而不是println,并删除第二个break;对于没有重叠的答案,您需要将i 调整为substr 的长度,并删除第二个break
猜你喜欢
  • 2011-11-09
  • 2013-05-18
  • 2020-11-28
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 2013-02-05
相关资源
最近更新 更多