簡體   English   中英

遞歸用於向后打印句子中的單詞

[英]Recursion for printing out words in sentence backwards

我正在研究一種可以將句子中的單詞向后打印的方法。 我非常接近解決方案,但遇到了小麻煩。

這是我的代碼:

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

    }

現在的問題是我的測試輸出:

String test = "This is a test.";

System.out.println(reverseString(test));

把這個還給我:

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

用這種方法,您可以根據空白有選擇地創建子字符串。 用於輸入This is a test. 下面的方法將給出退貨test. a is This test. a is This 這里的想法是,如果您有領先的空間,那么您實際上將轉換為結尾的空間。

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

    }

使用您的代碼,您只需要在要反轉的任何字符串之前添加一個額外的空間,例如此代碼

reverseString(" " + str)

首次執行該方法時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM