Java 用于反转字符串中的单词的程序

Java 用于反转字符串中的单词的程序,java,recursion,Java,Recursion,我已经写了一个程序来反转字符串中的单词。 如果i/p为“狗在追” 那么o/p应该是“追逐是狗” 但是我不知道如何使用递归编写这个程序。当我尝试在stackoverflow中搜索时,我可以找到一个字符串;但不能在字符串中反转单词 这是一个示例程序,它将递归地执行您想要的操作: public class ReverseWords { public static void main(String args[]) { String s = "This is a test";

我已经写了一个程序来反转字符串中的单词。 如果i/p为“狗在追” 那么o/p应该是“追逐是狗”


但是我不知道如何使用递归编写这个程序。当我尝试在stackoverflow中搜索时,我可以找到一个字符串;但不能在字符串中反转单词

这是一个示例程序,它将递归地执行您想要的操作:

public class ReverseWords {
    public static void main(String args[]) {
        String s = "This is a test";
        reverse(s);
    }

    private static void reverse(String s) {
        if(s == null) return;
        String words[] = s.split(" ", 2);
        if (words.length < 2) reverse(null);
        else reverse(words[1]);
        System.out.print(words[0] + " ");
    }
}
公共类反向记录{
公共静态void main(字符串参数[]){
String s=“这是一个测试”;
反面;
}
专用静态无效反转(字符串s){
如果(s==null)返回;
字符串[]=s.split(“,2);
如果(字长<2)相反(空);
反之(词语[1]);
系统输出打印(字[0]+“”);
}
}

这是一个示例程序,它将递归地执行您想要的操作:

public class ReverseWords {
    public static void main(String args[]) {
        String s = "This is a test";
        reverse(s);
    }

    private static void reverse(String s) {
        if(s == null) return;
        String words[] = s.split(" ", 2);
        if (words.length < 2) reverse(null);
        else reverse(words[1]);
        System.out.print(words[0] + " ");
    }
}
公共类反向记录{
公共静态void main(字符串参数[]){
String s=“这是一个测试”;
反面;
}
专用静态无效反转(字符串s){
如果(s==null)返回;
字符串[]=s.split(“,2);
如果(字长<2)相反(空);
反之(词语[1]);
系统输出打印(字[0]+“”);
}
}
开始时可能有点困难,但请尝试执行以下操作:

  • 尽可能地简化问题,让自己找到不太复杂的问题来解决。(例如,在这里,您可以使用一个包含两个单词的句子)

  • 从写在纸上开始,用最简单的语言帮助你解决问题

  • 开始编写代码,不要忘记对递归的转义


解决方案
publicstaticvoidmain(字符串[]args){
字符串s=reverseSentence(“这句话将被颠倒-我发誓”).split(“”);
系统输出打印项次;
}
公共静态字符串反转内容(字符串[]句){
如果(句子长度在开始时可能看起来有点难,但请尝试执行以下操作:

  • 尽可能地简化问题,以发现自己有较不复杂的情况需要解决。(例如,在这里,你可以使用一个包含两个单词的句子)

  • 从写在纸上开始,用最简单的语言帮助你解决问题

  • 开始编写代码,不要忘记对递归的转义


解决方案
publicstaticvoidmain(字符串[]args){
字符串s=reverseSentence(“这句话将被颠倒-我发誓”).split(“”);
系统输出打印项次;
}
公共静态字符串反转内容(字符串[]句){

if(句子长度递归方法,使用与相同的逻辑,不使用
split()

逻辑是:

  • 取第一个字符/单词
  • 如果这是最后一个字符/单词,请将其返回
  • 使用剩余文本执行递归调用(不包括单词分隔空间)
  • 追加空格(如果执行word)
  • 追加步骤1中的第一个字符/字
  • 返回结果
  • 如您所见,当应用于反转文本(字符)而不是单词时,它非常相似:

    私有静态字符串反向文本(字符串文本){
    
    返回(text.length()递归方法,使用与相同的逻辑,不使用
    split()

    逻辑是:

  • 取第一个字符/单词
  • 如果这是最后一个字符/单词,请将其返回
  • 使用剩余文本执行递归调用(不包括单词分隔空间)
  • 追加空格(如果执行word)
  • 追加步骤1中的第一个字符/字
  • 返回结果
  • 如您所见,当应用于反转文本(字符)而不是单词时,它非常相似:

    私有静态字符串反向文本(字符串文本){
    
    return(text.length()您可以参考以下代码

      class ReverseString {
    
    public static void main(String args[]) {
        String myString = "The dog is chasing";
    
        reverse(myString);
    }
    
    public static String reverse(String myString) {
        int space = myString.indexOf(" ");
        if (space != -1) {
            reverse(myString.substring(space + 1, myString.length()));
        }
        if (space == -1) {
            System.out.println(myString.substring(0, myString.length()));
        } else {
            System.out.println(myString.substring(0, space));
        }
        return myString;
    }
    }
    

    您可以参考以下代码

      class ReverseString {
    
    public static void main(String args[]) {
        String myString = "The dog is chasing";
    
        reverse(myString);
    }
    
    public static String reverse(String myString) {
        int space = myString.indexOf(" ");
        if (space != -1) {
            reverse(myString.substring(space + 1, myString.length()));
        }
        if (space == -1) {
            System.out.println(myString.substring(0, myString.length()));
        } else {
            System.out.println(myString.substring(0, space));
        }
        return myString;
    }
    }
    

    首先从一般的角度来考虑,而不是Java。在任何给定的递归调用中,您都有一个当前单词和句子的其余部分。您会怎么做?您会显示当前单词,然后执行句子的其余部分吗?或者其他什么?当然,当您用完单词时,您需要注意情况(或者说是最后一句话).可能是重复的否。它不是重复的。在那个问题中,他们正在反转字符串。例如:您好olleH@SethuramanSrinivasan这是同样的事情,除了附加第一个单词,而不是第一个字符,并带有空格分隔符。@Andreas如何对数组进行子串?只需先从一般意义上考虑,而不是专门考虑Java。在任何给定的递归调用中,您都有一个当前单词和句子的其余部分。您会怎么做?您会显示当前单词,然后执行句子的其余部分吗?还是做其他事情?当然,当您用完单词(或在最后一个单词上)时,您需要注意情况.可能是重复的否。它不是重复的。在那个问题中,他们正在反转字符串。例如:您好olleH@SethuramanSrinivasan这是相同的事情,除了附加第一个单词,而不是第一个字符,并带有空格分隔符。@Andreas如何对数组进行子串?在数组克隆过程中会产生大量开销,并且需要调用方准备通过调用
    split()
    来准备数据。在数组克隆过程中会产生大量开销,并且需要调用方通过调用
    split()
    来准备数据。
    private static String reverseText(String text) {
        return (text.length() <= 1 ? text : reverseText(text.substring(1)) + text.charAt(0));
    }
    
    private static String reverseWords(String text) {
        if (text == null) {
            return null;
        }
        int idx = text.indexOf(' ');
        if (idx == -1) {
            return text;
        }
        return reverseWords(text.substring(idx + 1)) + ' ' + text.substring(0, idx);
    }
    private static String reverseText(String text) {
        if (text == null || text.length() <= 1) {
            return text;
        }
        return reverseText(text.substring(1)) + text.charAt(0);
    }
    
      class ReverseString {
    
    public static void main(String args[]) {
        String myString = "The dog is chasing";
    
        reverse(myString);
    }
    
    public static String reverse(String myString) {
        int space = myString.indexOf(" ");
        if (space != -1) {
            reverse(myString.substring(space + 1, myString.length()));
        }
        if (space == -1) {
            System.out.println(myString.substring(0, myString.length()));
        } else {
            System.out.println(myString.substring(0, space));
        }
        return myString;
    }
    }