2016-11-13 90 views
2

我的工作得到它打印句子的單詞倒着出來的方法。我非常接近解決方案,但遇到了一些小麻煩。遞歸句子打印出字倒着

這裏是我的代碼:

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 

有沒有人對我的總體實施任何建議或指針?

+0

你得到它的工作? – ItamarG3

回答

2

您可以更改return語句是:

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

拆分使用String.split然後句子迭代所得的陣列上倒退。在空白分割做

test.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; 
} 
+2

我已經做了一個迭代的方法。我試圖找出遞歸方法。 – ClownInTheMoon

+1

@ClownInTheMoon:對不起,錯過了。我編輯了我的答案。 – Quagaar

-1

與您的代碼工作,你就只需要在你想要的任何字符串的前面加上一個額外的空間用此代碼反轉

reverseString(" " + str) 

當您第一次執行該方法時。

+0

但是這總是成立的,在這種情況下......'i'是臨時遞歸'str'中最後一個單詞的長度,所以它總是小於'str'的​​長度。你提出的建議會導致每封信都被當作一個單獨的單詞處理(即它會返回'。tsetasisih T') – ItamarG3

+0

是的,你說得對,我誤解了我已經更新了我的答案的問題 – Joking313

+1

這會按照,而不是翻轉一個句子中的單詞。 '原文:這是一個測試。反轉:.tset a si sihT' –

1

在這種方法中,你可以選擇創建串基礎上的空白。對於輸入This is a test.以下方法將返回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)); 
     } 

    }