- ベストアンサー
Javaで文字列を逆転させる方法とは?
- Java初心者の方が文字列を逆転させる方法について教えてください。
- Javaのreverseメソッドを使わずに、for文とchar型を使用して文字列を逆転する方法を教えてください。
- 質問に掲示されているプログラムには一部不適切な部分がありますが、目標とは異なる結果が出力されているようです。解決策を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは、 >最初に質問書いた時にコメントアウトしたこの部分と同じ意味ですよね。 失礼しました。 コメント文、見逃していました。 ということで、同じような、処理なのですが。 追加の一例を、書きました。 String ss="abcdefg"; StringBuffer sb1 = new StringBuffer(); for(int i=0;i<ss.length();++i){ sb1.insert(0,ss.charAt(i)); } System.out.println(sb1.toString()); これでも、 結果は、 gfedcba になるようです。 StringBufferも、いろいろと便利な時があるみたいです。
その他の回答 (4)
- PED02744
- ベストアンサー率40% (157/390)
Stringクラスは特殊なので、 >value = value + c; これをループの中で使うと、文字列が長い場合、大量のStringクラスのゴミが できてしまいます。(Stringクラスは書き換えができないので、新規作成してしまう) ANo.4さんの様にStringBufferを使って先頭からアペンドするか、 ANo.2さんの様にchar配列を使って見かけ上入れ替えを行う(実際には入れ替わっていない) をするか、したほうがよろしいでしょう。 私個人としては、ANo.4さんの回答が好きかな(笑)
補足
遅くなってすいません! 回答有難う御座います。 調べたらそうですね、書き換えできないんですねstring・・・全然意識して無かったです。 まだ全然使いこなせませんが、StringBufferクラスはその逆のようですね。 >大量のStringクラスのゴミができてしまいます 出ましたね、増えていく過程がわらわらと(笑) 自分の中ではNo2さんのtoCharArrayやNo3さんのreverse()等のJavaで用意された便利な文法は、未熟な自分にとってまだ高級過ぎるのでfor charやわりと初期の文法でなんとか過程を示さずに結果のみを出す方法を見つけてみたいですね。 この質問の前に先生にネットで調べたreverseメソッド(質問時にコメントアウトした箇所)を利用してみせたら、もっと基本的な部分な文法でやってみてくださいと言われたのも理由のひとつですが(笑)。 でもいつかはNo2、3さんのような便利なメソッドまで使いこなせるようになるつもりです。 No2,4さん達のようにやってみました。ハハ、テクニック色々ありますね。みなさんに感謝です。
- tom11
- ベストアンサー率53% (134/251)
こんにちは、 String ss="abcdefg"; StringBuffer sb = new StringBuffer(ss); System.out.println(sb.reverse().toString()); 実行結果 gfedcba StringBufferクラスにリバースそのものがあります。
補足
遅くなりましたが有難うございます! //StringBuffer sbrev = new StringBuffer(str); //String strrev = sbrev.reverse().toString(); //System.out.println(strrev); 最初に質問書いた時にコメントアウトしたこの部分と同じ意味ですよね。 String ss="abcdefg"; StringBuffer sb = new StringBuffer(ss); System.out.println(sb.reverse().toString()); 指摘を受けたこちらも同様に動作確認しました。 有難うございました。
- hilow1
- ベストアンサー率53% (7/13)
最初から配列にしてしまう方法はどうでしょうか? (これだと楽しすぎでしょうか 笑) public class Test { public static void main(String[] args) { String str = "abcdefg"; char[] cStr = str.toCharArray(); for(int i=str.length()-1; i>=0; i--) { System.out.println(cStr[i]); } } } 「str.length()-1」の"-1"は、配列として考えてみると分かりやすいと 思います。"abcdefg"の1文字目aは配列でいうと0番目で、つまり末尾 (7文字目)のgは6番目です。ですから、"文字数-1"を指定します。 間違ってたらすいません!!
補足
アドバイス有難うございます! >これだと楽しすぎでしょうか 笑 いえいえ私にとってとても役立ちます、ハハハ。 なるほど配列ですか。 そういうやり方ありましたね、盲点! お~役立ちますこういう時に、配列! 分かりやすいですね。 確かに配列は番号が0から始まりましたね。 それで-1にして合わせてたんですね、そういや勉強した覚えがあります・・・orz 度々見ますよね、こういう表示。 ToCharArray()メソッドというのは私としては初めてですね。 文字列をchar型の配列に変換するんですか! 便利なのあるんですね。 知らなかった・・・。 これこの場合の配列には必要不可欠ですね、きっと。 納得できました、有難うございました。
- laundryload
- ベストアンサー率35% (18/51)
ハハ、逆から読んだらどう? // for(int i = 0; i < str.length(); i++) { for(int i = str.length() - 1; i >= 0 ; i--) {
補足
アドバイス有難うございます! でけた~~~♪ for(int i = str.length() - 1; i >= 0 ; i--) { ↑これなんですが自分も直感的にコレに似た for(int i = str.length(); i >= 0 ; i--) { 作ったりしたんですが、なぜ初期値をint i = str.length() - 1にしないと駄目なのか、分かりません。ようは「-1」の部分ですね。 あと出来れば逆転した結果のgfedcbaを増えていく経過を表示せずに1文のみ表示させてみたいのですが、どうすればいいでしょうか。
補足
遅くなってすいません!すいません・・・うう・・・。 回答有難う御座います。 >失礼しました。 いえいえ全然構いません。 まだ初心者なので少しの書き方の違いでも勉強になるんです。 細く有難う御座います。 >sb1.insert(0,ss.charAt(i)); この部分のinsertメソッド(?)と括弧の中身の意味と役割がまだ学習しておらず分かりませんが、自分で調べてみますorz 便利ですね~使いこなせるようになりたいです。 有難う御座いました。