一个递归的java程序,用于查找字符串

时间:2016-06-16 21:27:08

标签: java recursion substring

我试图找到字符串中的所有子字符串,我已经编写了以下代码,但我有一些不需要的输出,如下所示: 该方法首先打印子串(0,1),然后通过将b递增为b来调用自身并继续这样做,当b> string的长度时,它将预先增加a,并将+ 1传递给b,并且它继续这样,直到最后一个子串,其中+ 1 ==字符串的长度,这是我的recurive程序终止时。

public static void main(String[] args) {
    recsub("java",0,1);
}

public static void recsub(String str,int a,int b){
    if(b>str.length()) {
        System.out.println();
        recsub(str,++a,a+1);
    }
    else {
        System.out.print(str.substring(a,b)+" "); 
    }
    if((a+1)==str.length()) {

    } 
    else {
        recsub(str,a,b+1);
    }

此代码的输出为:

j ja jav java 
a av ava 
v va
a
a
v va
a
a 

或者我可以通过这种方法突破并返回主程序,只要程序输入if(if(a + 1)== ...),就像打破一个循环一样?

1 个答案:

答案 0 :(得分:0)

如果你很好地构建你的逻辑,你就不应该打破这样的例程,虽然它对返回<非常合法(并且通常很有用) / strong>根据需要。

错误发生在第二次递归中:这应该以子字符串大小 b 足够短为条件。

我冒昧地更换了一个字母的变量名(a - &gt; start_pos,b - &gt; size),更改了测试字符串(&#34; java&#34;有两个一个,因此更难跟踪),并清理空白区域。

public class substr {
  public static void main(String[] args) {
    recsub("abcd", 0, 1);
  }

  public static void recsub(String str, int start_pos, int size){
    if (size > str.length()) {
      // Print newline; restart with next character
      System.out.println();
      recsub(str, ++start_pos, start_pos+1);
    }
    else {
      // Print one substring
      System.out.print(str.substring(start_pos, size)+" ");
      if (start_pos+1 < str.length()) {
        recsub(str, start_pos, size+1);
      }
    }
  }
}

输出:

a ab abc abcd 
b bc bcd 
c cd 
d