String 使用java递归地从字符串中删除字符

String 使用java递归地从字符串中删除字符,string,recursion,String,Recursion,我试图用递归方法编写一个程序,对给定的字符串“Sluggo”执行以下操作 这是我目前的计划: import java.util.Scanner; public class RecursiveDescentParser { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Please enter a string:

我试图用递归方法编写一个程序,对给定的字符串“Sluggo”执行以下操作

这是我目前的计划:

 import java.util.Scanner;

 public class RecursiveDescentParser {


 public static void main(String[] args) 
 {
   Scanner input = new Scanner(System.in);

   System.out.println("Please enter a string: ");
   String s = input.next();

   chopBack(s.substring(0));
   chopBack(s.substring(1));
   chopBack(s.substring(2));
   chopBack(s.substring(3));
   chopBack(s.substring(4));
   chopBack(s.substring(5));
 }//end of main

 public static String chopBack(String str)
 {
   if (str.length() == 0)
      return "";
   else
      System.out.println(str.substring(0, str.length()));
      return chopBack(str.substring(0, str.length() - 1 ));
 }
}
我知道这不对,因为我需要编写类似于双重递归方法的东西。只是想知道从这一点上我应该去哪里?我还编写了一个从字符串前面删除char的方法。在这一点上,我不太确定如何将两者连接在一起哈哈

在这里:

public String run(String input) {

    StringBuilder sb = new StringBuilder();

    process(input, sb);

    return sb.toString();
}

private void process(String input, StringBuilder sb) {

    tail(input, sb);

    if (input.isEmpty()) {
        sb.deleteCharAt(sb.length() - 1);
        return;
    }

    process(input.substring(1, input.length()), sb);
}

private void tail(String input, StringBuilder sb) {

    if (input.isEmpty())
        return;

    sb.append(input).append('\n');

    tail(input.substring(0, input.length() - 1), sb);
}
这是:

public String run(String input) {

    StringBuilder sb = new StringBuilder();

    process(input, sb);

    return sb.toString();
}

private void process(String input, StringBuilder sb) {

    tail(input, sb);

    if (input.isEmpty()) {
        sb.deleteCharAt(sb.length() - 1);
        return;
    }

    process(input.substring(1, input.length()), sb);
}

private void tail(String input, StringBuilder sb) {

    if (input.isEmpty())
        return;

    sb.append(input).append('\n');

    tail(input.substring(0, input.length() - 1), sb);
}

导入java.util.Scanner

/** *@author JFVARUGH * */ 公共类递归StringREM{

static String str ;
public static void main(String[] args) {
    // TODO Auto-generated method stub
    RecursiveStringRem drive = new RecursiveStringRem();
    Scanner sc = new Scanner(System.in);
    System.out.println("Input the String");
    str = sc.nextLine();
    drive.superStringCall(str);
}

public void  truncateSingleString(String str){
    // Base Condition
    if(str.length()==1){
        System.out.println(str);
        return;
    }

    // Recursive Call 
    System.out.println(str);
    // This will truncate the string by one position
    truncateSingleString(str.substring(1));         
}

public void superStringCall(String str){

    //Base Condition
    if(str.length()==1){
        return;
    }

    // Recursive Call 
    System.out.println(str);
    // This will call the previous function
    truncateSingleString(str.substring(1));

    // Recursive call in the current function
    superStringCall(str.substring(1));      
}
}

我想这些评论是不言自明的


这是一个编译代码。

导入java.util.Scanner

/** *@author JFVARUGH * */ 公共类递归StringREM{

static String str ;
public static void main(String[] args) {
    // TODO Auto-generated method stub
    RecursiveStringRem drive = new RecursiveStringRem();
    Scanner sc = new Scanner(System.in);
    System.out.println("Input the String");
    str = sc.nextLine();
    drive.superStringCall(str);
}

public void  truncateSingleString(String str){
    // Base Condition
    if(str.length()==1){
        System.out.println(str);
        return;
    }

    // Recursive Call 
    System.out.println(str);
    // This will truncate the string by one position
    truncateSingleString(str.substring(1));         
}

public void superStringCall(String str){

    //Base Condition
    if(str.length()==1){
        return;
    }

    // Recursive Call 
    System.out.println(str);
    // This will call the previous function
    truncateSingleString(str.substring(1));

    // Recursive call in the current function
    superStringCall(str.substring(1));      
}
}

我想这些评论是不言自明的


这是一个编译代码。

太棒了,谢谢你们

只是和一个朋友玩了一下,这是他在c中提出的解决方案#


太棒了,谢谢你们

只是和一个朋友玩了一下,这是他在c中提出的解决方案#


看起来不错,但输出不太正确:)谢谢你的灵感!我想让str成为静态会解决我的很多问题!看起来不错,但输出不太正确:)谢谢你的灵感!我想让str成为静态会解决我的很多问题!看起来棒极了!我真的应该更多地使用字符串生成器哈哈哈。看起来棒极了!我真的应该更经常地使用字符串生成器哈哈哈。