2016-11-13 15 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 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)); 
     } 

    } 
関連する問題