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

时间:2015-11-18 00:49:36

标签: java recursion

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

public class String_reverse {

    public static void main(String[] args) {

        String input= "The dog is chasing";

        String[] arr= input.split(" ");
        String reverse="";
        for(int i=arr.length-1;i>=0;i--)
        {
            reverse+= ((reverse.equals(""))?"":" ")+arr[i];
        }
        System.out.println(reverse);

    }

}

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

4 个答案:

答案 0 :(得分:2)

递归方法,使用与linked "duplicate"相同的逻辑,而不使用split()

private static String reverseWords(String text) {
    int idx = text.indexOf(' ');
    return (idx == -1 ? text : reverseWords(text.substring(idx + 1)) + ' ' + text.substring(0, idx));
}

逻辑是:

  1. 取第一个字/
  2. 如果那是最后一个字/单词,请用它返回
  3. 使用剩余文本执行递归调用(不包括单词分隔空格)。
  4. 追加空间(如果做的话)
  5. 附加第1步中的第一个字符/字
  6. 返回结果
  7. 正如您所看到的,当应用于反转文本(字符)而不是单词时,它的非常类似:

    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);
    }
    

    请注意reverseText()的长版本与链接副本中的版本完全相同。

答案 1 :(得分:1)

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

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] + " ");
    }
}

答案 2 :(得分:1)

Recursive methods在开始时似乎有点难,但尝试执行以下操作:

  • 尽可能简化问题,找出自己不太复杂的案例来解决问题。 (例如,您可以使用带有两个单词的句子。)

  • 首先在纸上进行,使用Pseudocode帮助您用最简单的语言处理问题。

  • 开始编码,不要忘记递归到你的递归。

解决方案

public static void main(String[] args) {
    String s = reverseSentence("This sentence will be reversed - I swear".split(" "));
    System.out.println(s);
}

public static String reverseSentence(String[] sentence){
    if (sentence.length <= 1){
        return sentence[0];
    }
    String[] newArray = new String[sentence.length-1];
    for (int i = 0 ; i < newArray.length ; i++){
        newArray[i] = sentence[i];
    }
    return sentence[sentence.length-1] + " " + reverseSentence(newArray);
}

答案 3 :(得分:1)

您可以参考以下代码。

  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;
}
}