java - 结束字符串、递归和搜索事件

标签 java string recursion

我的代码所做的是在方法 countSubstring 中传递两个字符串和一个计数。 countSubString 计算 strTwo 在 strOne 中的出现次数。 但是我有困难,因为我不明白一些事情:

    public class CountingSubString
    {
        int CountSubString(String strOne, String strTwo, int count)
        {
          int i = 0;
          int foundAtIndex = strOne.indexOf(strTwo, i);
           if(foundAtIndex == -1)
        {
            i++;
        }
         else//(foundAtIndex != -1)
        {
         count++;
          int newStartIndex = foundAtIndex + strTwo.length();
         String StringFromString = strOne.substring(newStartIndex, strOne.length()-1);
          count = count + countSubString(StringFromString, strTwo, count);
         return count;
        }
         return count;
       }
         public class TestCountingSubString 
      {
           public static void main(String[] argv)
         {
           String s2 = new String("abab");
            String s3 = new String("ab");
          String s4 = new String("aabbaa");
          String s5 = new String("aa");
          countingSubString CountOfString = new countingSubString();
          int count = CountOfString.countSubString(s2, s3, 0);
         System.out.println(count);
          }
      }  

问题 1) 让我们考虑一种情况,其中 string1 = c,string2 = aa。 aa 不包含在 c 中。 我如何为这个案例制作一个基本案例? 我的尝试:

问题2)在java中一个字符串是如何结束的? 如果我有 string1 = "aabbaa"和 string2 = "aa"。 我从索引 0 和 1 得到 aa,所以我返回索引 0。计算 string2.length() + 0 = 2。 现在我将 beginIndex: 2 处的字符串 1 子串到 endindex: string2.length-1 以获得新字符串以获得“bbaa”。 再次搜索,我在索引 2 和 3 处获得了字符串 aa。 如何在字符串 aa 之后结束递归?

最佳答案

你为什么要把事情复杂化。它是 java,使用它的特性。

String string1 = "abab";
Pattern p = Pattern.compile("ab");
Matcher m = p.matcher(string1);
int count = 0;
while (m.find()){
    count +=1;
}
System.out.println(count);

另外为了您的理解,substring 函数具有以下格式

public String substring(int beginIndex, int endIndex)

在哪里

beginIndex -- the begin index, inclusive.

endIndex -- the end index, exclusive.

问题 1 中的安全条件

if (strOne == null || strOne.equals("") || strTwo.length() < sub.length())
 return 0;

问题2的解答

int index =  strOne.indexOf(strTwo);
if(index!=-1){
    count++;
    count+= countSubString(strOne.substring(index+1),strTwo,0);
}

如此完整的解决方案是

class countingSubString
 {
    int countSubString(String strOne, String strTwo, int count)
    {
      if (strOne == null || strOne.equals("") || strOne.length() < strTwo.length())
        return 0;

      int index =  strOne.indexOf(strTwo);
      if(index!=-1){
        count++;
        count+= countSubString(strOne.substring(index+1),strTwo,0);
      }

      return count;
   }
}

此外,从类 countingSubString 中删除 public 修饰符,因为一个文件中只能有一个公共(public)类。并且还遵循命名约定,所以类名应该是

CountingSubString instead of countingSubString

关于java - 结束字符串、递归和搜索事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25926157/

相关文章:

java - 使用 Java 在 Ubuntu 中获取音频设备名称

java - graphstream.Graph 类中的问题

java - 动画 Android Ring Shape 的扫角

ruby - 为什么 Ruby String#split 不将连续的尾随定界符视为单独的实体?

java - 字符串的有序固定长度组合

java - 这段 Java 代码发生了什么?

java - Clojure——如何使用 deftype 定义公共(public)可变成员?

scala - 函数式编程: recursive loop output fibonacci sequence in scala

javascript - 在 JavaScript 中递归构建树

java - 尝试在java中使用递归查找字符串的反向时出现StackOverflowError