查找字符串中所有子字符串的递归java程序

查找字符串中所有子字符串的递归java程序,java,recursion,substring,Java,Recursion,Substring,我试图找到字符串中的所有子字符串,我已经编写了以下代码,但我有一些不需要的输出,如您所见: 该方法首先打印子字符串(0,1),然后通过用1递增b来调用自己,并继续这样做,当b>string的长度时,它将预递增a,并将a+1传递给b,然后继续这样做,直到最后一个子字符串a+1==string的长度,这是我的递归程序应该终止的时候 public static void main(String[] args) { recsub("java",0,1); } public static voi

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

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 

或者我可以通过这个方法跳出并返回到main,每当程序输入if(if(a+1)=…)时,比如打破一个循环吗?

如果你的逻辑结构良好,你就不必打破这样的例程,尽管根据需要返回是合法的(通常是有用的)

错误出现在第二次递归中:这应该取决于子字符串大小b是否足够短

我自由地替换了一个字母的变量名(a->start\u pos,b->size),更改了测试字符串(“java”有两个a,因此更难跟踪),并清理了空白

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