使用嵌套循环进行字符串比较

时间:2014-05-03 17:31:09

标签: java loops comparison string-comparison

我正在关注这个在线Java课程,在每次会议之后几乎没有任务,我似乎无法解决这个问题。

我知道这不是练习的重点,但我尝试了一切,我看不到任何其他方式。


编写一个程序,返回另一个字符串中出现的字符串数。例如:

输入:
第一个字符串:

第二个字符串: 学生正在 工程学院努力工作,因为**喜欢它

输出:
3

注意:您应该使用嵌套循环。不要使用像indexOf或substring

这样的方法

到目前为止,这是我的代码,我知道它不完整,而且我很确定大多数决策都不需要。

编辑:这是一个C#代码,我正在测试Java和C#

        String Text1 = Console.ReadLine();
        String Text2 = Console.ReadLine();
        int counter = 0;

        for (int y = 0; y < Text1.Length; y++)
        {

            for (int x = 0; x < Text2.Length; x++)
            {

                if (Text1[y] == Text2[x])
                {

                    if (y + 1 < Text1.Length && x + 1 < Text2.Length)
                    {
                        if (Text1[y + 1] == Text2[x + 1])
                        {

                        }
                    }


                }

            }

        }

3 个答案:

答案 0 :(得分:1)

public static int count(String text1, String text2)
{
    int res = 0;
    for (int i=0;i<text2.length()-text1.length();i++)
    {
       if (text1.charAt(0) == text2.charAt(i))
       {
          boolean found = true;
          for (int j=0;j<text1.length() && found;j++)
              if (text1.charAt(j) != text2.charAt(i+j))
                  found = false;
          if (found)
              res++;
       }
    }
    return res;
}

答案 1 :(得分:1)

由于您正在进行练习,我不会修复您的代码,但可以帮助您自行修复。

首先,一些基础知识:在Java中,您使用charAt(i)来访问单个字符。例如,

char ch = Text1.charAt(3);

从字符串的开头获取第四个字符(索引从零开始)。

现在对于算法:你希望迭代第二个字符串的所有位置后面有足够的字符,以便与第一个字符串匹配。这意味着索引从零(包括零)到位置Text2.length()-Text1.length(),不包括在内。这是潜在匹配的起始位置 - 让我们称之为p

给定位置p,您希望从零开始遍历Text1的所有字符,并将它们与位置Text2处的字符开头的p个字符进行比较。我们假设Text1中的索引称为i,它从零(含)到Text1.length(),独占。然后,您希望将Text1.getChar(i)Text1.charAt(i+p)进行比较。

在宣布匹配之前,您需要与Text1的所有字符完成比较。您需要知道外部循环中的结果,因此您希望使用bool标志。在内循环之前将标志设置为true。如果发现不匹配,请将标记设置为false,然后退出循环。

如果内循环后标志为true,则递增计数器。

答案 2 :(得分:0)

@么 - 由于这是一个赋值,我建议你遵循String.class中的“public int indexOf(String str)”方法,并通过少量修改来复制类似的东西来解决你的问题。