Java 用于向后打印句子中单词的递归

Java 用于向后打印句子中单词的递归,java,recursion,Java,Recursion,我正在研究一种方法,可以把一个句子的单词倒排出来。我非常接近解决方案,但遇到了一个小问题 这是我的密码: public static String reverseString(String str) { if (str.equals("")) return ""; else { int i = str.length() - 1; while (!Character.isWhitespa

我正在研究一种方法,可以把一个句子的单词倒排出来。我非常接近解决方案,但遇到了一个小问题

这是我的密码:

public static String reverseString(String str) {

        if (str.equals(""))
            return "";

        else {

            int i = str.length() - 1;

            while (!Character.isWhitespace(str.charAt(i))) {
                if (i - 1 < 0)
                    break;
                i--;
            }

            return str.substring(i,str.length()) + reverseString(str.substring(0,i));
        }

    }
正在把这个还给我:

  test. a isThis
现在,当我尝试增加正在返回的子字符串的索引并手动添加空格时,它会切断“This”中的“T”。也就是说,如果我决定按如下方式返回:

return str.substring(i+1,str.length()) + " " + reverseString(str.substring(0,i));
然后我回来

test. a is his 

有人对我的实现有什么建议或建议吗?

使用String.Split拆分句子,然后向后迭代生成的数组。用空格分开吗

test.split(" +");
split方法采用一个正则表达式,上面的意思是:在一个或多个连续空格处拆分

递归方法:

public String reverse(final String s) {

    final int pos = s.indexOf(' ');
    if (pos > -1) {
        return reverse(s.substring(pos + 1).trim()) + " " + s.substring(0, pos).trim();
    }

    return s;
}

您可以将return语句更改为:

return str.substring(i, str.length()).trim() + " " + reverseString(str.substring(0, i));

使用代码时,只需在要反转的字符串前面添加额外的空格,例如使用此代码

reverseString(" " + str)

当您第一次执行该方法时。

在这种方法中,您可以根据空格有选择地创建子字符串。对于输入
这是一个测试。
下面的方法将返回
测试。a这是
。这里的想法是,若你们有一个前导空格,你们实际上会转换成尾随空格

public static String reverseString(String str) {

        if (str.equals(""))
            return "";

        else {

            int i = str.length() - 1;

            while (!Character.isWhitespace(str.charAt(i))) {
                if (i - 1 < 0)
                    break;
                i--;
            }
            String substring;

            if(Character.isWhitespace(str.charAt(i)))
            {
                substring= str.substring(i+1,str.length())+" ";
            }
            else
            {
                substring= str.substring(i,str.length());
            }

            return substring + reverseString(str.substring(0,i));
        }

    }
publicstaticstringreversestring(stringstr){
if(str.equals(“”)
返回“”;
否则{
int i=str.length()-1;
而(!Character.isWhitespace(str.charAt(i))){
if(i-1<0)
打破
我--;
}
字符串子串;
if(Character.isWhitespace(str.charAt(i)))
{
substring=str.substring(i+1,str.length())+“”;
}
其他的
{
substring=str.substring(i,str.length());
}
返回子字符串+反向字符串(str.substring(0,i));
}
}

我做了一个迭代方法。“我正试图找出一种递归方法”。@月亮:对不起,错过了。我编辑了我的答案。但那永远是真的,在这种情况下
i
是临时递归
str
中最后一个单词的长度,因此它总是小于
str
的长度。你的建议将导致每个字母都被视为一个单独的单词(即,它将返回
。t s e t a s i s h t
)是的,你是对的,我误解了我更新了答案的问题这将按原样颠倒句子,而不是颠倒句子中的单词<代码>原件:这是一个测试。反转:.t设置一个si sihT你让它工作了吗?
public static String reverseString(String str) {

        if (str.equals(""))
            return "";

        else {

            int i = str.length() - 1;

            while (!Character.isWhitespace(str.charAt(i))) {
                if (i - 1 < 0)
                    break;
                i--;
            }
            String substring;

            if(Character.isWhitespace(str.charAt(i)))
            {
                substring= str.substring(i+1,str.length())+" ";
            }
            else
            {
                substring= str.substring(i,str.length());
            }

            return substring + reverseString(str.substring(0,i));
        }

    }