用递归的方法反转Java中的单词

用递归的方法反转Java中的单词,java,string,recursion,Java,String,Recursion,在这个方法中,我试图使用递归来改变单词而不是字母的位置 例如,如果此函数reverse是输入,则输出应该是此函数reverse 但我目前的输出是:esrever noitcnuf siht 我测试了这段代码,它运行正常 大多数情况下,返回一个字符串,然后打印这个字符串(如果需要) 如果使用charAt,则只能获得单个字符。因此,很难不颠倒单词的字母。查找单词之间的空格,然后使用子字符串检索整个单词更容易 子字符串方法可以接受两个参数,startIndex和endIndex,或者只接受一个参数,仅

在这个方法中,我试图使用递归来改变单词而不是字母的位置

例如,如果此函数reverse是输入,则输出应该是此函数reverse

但我目前的输出是:esrever noitcnuf siht

我测试了这段代码,它运行正常

大多数情况下,返回一个字符串,然后打印这个字符串(如果需要)

如果使用charAt,则只能获得单个字符。因此,很难不颠倒单词的字母。查找单词之间的空格,然后使用子字符串检索整个单词更容易

子字符串方法可以接受两个参数,startIndex和endIndex,或者只接受一个参数,仅接受startIndex。然后它返回从这个startIndex到字符串末尾的子字符串


注意:我知道你可以使用split,我想展示一下如何使用索引。如果已经使用了拆分,那么最好不要使用递归。

试试这个。它遍历输入字符串并找出每个单词,然后通过颠倒单词的顺序将它们合并到反转的字符串中

public static String reverseString(String str) {
    if (str == null)
        return "";
    if (!str.contains(" "))
        return str;

    int whitespacePos = str.indexOf(" ");
    String firstWord = str.substring(0, whitespacePos);
    return reverseString(str.substring(whitespacePos + 1)) + " " + firstWord;
}

public static void main(String[] args) {
    String str = "this function reverse";
    System.out.println(reverseString(str));
}
按如下方式操作:

public static void printReverse (String str)
{
    if ((str == null) || (str.equals(""))) 
       return ;
    str = str + " "; //to add a space at the end. this will help in detecting the last word
    String revStr = "", word = "";
    char c;
    for (int i=0; i < str.length(); i++)
    {
         c = str.charAt(0);
         if (c != ' ')
         {
             word = word + c;
         }
         else
         {
             revStr = word + " " + revStr;
         }
    }

    System.out.println(revStr.Trim()); //removes the extra space from the end

    }
}
输出:

如有任何疑问/问题,请随时发表评论

reverse function this
别忘了进口

public static void reverseWords(String str){
        if(str=="" || str==null){ 
            return;
        }else {
            String[] _str = str.split(" ");
            System.out.println(_str[_str.length-1]);
            String[] newArr = Arrays.copyOf(_str,_str.length-1);
            reverseWords(String.join(" ", newArr));
        }
    }
这里有一个解决方案:

公共字符串反向字符串最终字符串str{ //使用三元运算符 返回str.lastIndexOf32==-1 ?str :str.substringstr.lastIndexOf32+1++reverseStringstr.substring0,str.lastIndexOf32; } 或者如果有其他情况:

公共字符串反向字符串最终字符串str{ 如果str.lastIndexOf32==-1 返回str; 其他的 返回str.substringstr.lastIndexOf32+1++reverseStringstr.substring0,str.lastIndexOf32; }
32是空格字符。因此,如果字符串中没有空格,它只返回字符串单词。如果有,它会递归地交换后面的尾部和前面的单词。

使用String.split将单词放入数组,然后反转数组。@GriffeyDog-你的想法很好,但对于似乎没有经验的OP来说,这可能是压倒性的。同时,我不想浪费你的想法。所以,我写这篇文章的目的是,如果有人在根据你的想法寻找解决方案,它可能会很有用。请不要通过破坏你的帖子为其他人做更多的工作。通过在Stack Exchange网络上发布,您已授予Stack Exchange在下的不可撤销的权利,以分发该内容,即无论您未来的选择如何。根据堆栈交换策略,帖子的非破坏版本是分发的版本。因此,任何故意破坏行为都将恢复原状。如果你想了解更多关于删除帖子的信息,请参阅:Jason Miles-如果其中一个答案解决了你的问题,你可以通过将其标记为已接受来帮助社区。公认的答案有助于未来的访问者自信地使用解决方案。查看以了解如何操作。非常感谢!谢谢,但我需要递归方法。但再次谢谢你,好的。在这种情况下,我们可以用一个带有退出条件的递归调用替换for循环,该条件检查原始字符串的长度,并在length==0时返回它。我想这里已经有其他正确的答案了。谢谢,欢迎光临。请添加一些解释。非常感谢!这真的很有帮助
reverse function this
public static void reverseWords(String str){
        if(str=="" || str==null){ 
            return;
        }else {
            String[] _str = str.split(" ");
            System.out.println(_str[_str.length-1]);
            String[] newArr = Arrays.copyOf(_str,_str.length-1);
            reverseWords(String.join(" ", newArr));
        }
    }
import java.util.Arrays;
public String reverseString(String str){
    if(str.lastIndexOf(32) ==-1){ //32 is an ASCII value for space 
        return str;
    }
    return str.substring(str.lastIndexOf(32)+1)+" "+reverseString(str.substring(0,str.lastIndexOf(32)));

    //Here lastIndexOf() method get the last element of space so that method substring takes the String after last space because is used lastIndexOf(32)+1 and 
   //reverseString() method continuously takes up to n-1 from nth string until lastIndexOf() return -1 i.e no more whitespace avaliable 

}