Javaで文字列を左右反転したい、または文字の並びを逆順にしたいという場面は、業務・学習のどちらでも頻繁に発生します。
ログ解析、入力チェック、回文判定、データ加工など、実務での用途は多岐にわたります。
本記事では、Javaにおける「文字列の左右反転」と「逆順ソート」について、基本から実務で安全に使える方法までを解説します。

文字列の左右反転とは何か
「左右反転」とは、文字列の先頭と末尾を入れ替え、全体の並びを逆順にする処理を指します。
例
ABCDEF → FEDCBA
こんにちは → はちにんこ
これは「逆順化」「リバース」とも呼ばれ、配列処理の基本としても扱われます。
Javaでは文字列が不変(immutable)であるため、直接書き換えることはできません。
そのため、補助クラスや配列を利用した処理が必要になります。
StringBuilder を使った最も簡単な方法
Javaで文字列を左右反転する際、最も簡潔で安全なのが StringBuilder を利用する方法です。
サンプルコード
|
1 2 3 |
String text = "ABCDE"; String reversed = new StringBuilder(text).reverse().toString(); System.out.println(reversed); |
解説
・StringBuilder は可変クラス
・reverse() メソッドが標準で用意されている
・処理が短く、可読性が高い
この方法はパフォーマンス面でも優れており、通常の業務処理であれば最優先で採用できます。
文字配列を使って左右反転する方法
アルゴリズム学習や処理の中身を明示したい場合は、文字配列を使う方法も有効です。
サンプルコード
|
1 2 3 4 5 6 7 8 9 10 11 |
String text = "ABCDE"; char[] chars = text.toCharArray(); for (int i = 0, j = chars.length - 1; i < j; i++, j--) { char temp = chars[i]; chars[i] = chars[j]; chars[j] = temp; } String reversed = new String(chars); System.out.println(reversed); |
解説
・toCharArray() で文字配列に変換
・先頭と末尾を入れ替える処理を繰り返す
・処理の仕組みが明確で理解しやすい
試験対策やアルゴリズム理解には適していますが、実務では StringBuilder の方が簡潔です。
ループ処理で逆順に連結する方法
古いJavaコードや学習初期によく見られる方法です。
|
1 2 3 4 5 6 7 8 |
String text = "ABCDE"; String result = ""; for (int i = text.length() - 1; i >= 0; i--) { result += text.charAt(i); } System.out.println(result); |
注意点
この方法は String を繰り返し連結するため、処理効率が良くありません。
大量データやループ回数が多い場合は使用を避けるべきです。
文字列の「逆順ソート」とは
左右反転と混同されやすいのが「逆順ソート」です。
これは文字の並びを単純に反転するのではなく、並び替えた結果を逆順にする処理です。
例
文字列: "dcab"
昇順ソート → "abcd"
逆順ソート → "dcba"Code language: JavaScript (javascript)
文字列を逆順ソートする方法
サンプルコード
|
1 2 3 4 5 6 7 8 9 10 |
String text = "dcab"; char[] chars = text.toCharArray(); Arrays.sort(chars); String reversedSorted = new StringBuilder(new String(chars)) .reverse() .toString(); System.out.println(reversedSorted); |
解説
・Arrays.sort() は昇順のみ対応
・逆順にしたい場合は reverse() を組み合わせる
・Unicode順で並び替えられる
Comparator を使った逆順ソート(応用)
List に変換することで、Comparator を使用した逆順指定も可能です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
String text = "dcab"; List<Character> list = new ArrayList<>(); for (char c : text.toCharArray()) { list.add(c); } list.sort(Comparator.reverseOrder()); StringBuilder sb = new StringBuilder(); for (char c : list) { sb.append(c); } System.out.println(sb.toString()); |
業務で複雑な並び替え条件が必要な場合に有効です。
マルチバイト文字(日本語)での注意点
日本語や絵文字を扱う場合、基本的な reverse() は問題なく動作します。
ただし、サロゲートペアを含む文字(一部の絵文字など)では、意図しない結果になる可能性があります。
厳密な制御が必要な場合は、コードポイント単位での処理を検討してください。
よくある質問(Q & A)
- 左右反転と逆順ソートは同じ意味ですか?
-
いいえ。左右反転は元の並びをそのまま逆にする処理で、逆順ソートは並び替えた結果を逆順にする処理です。
- 実務ではどの方法が推奨されますか?
-
単純な反転であれば StringBuilder.reverse() が最も安全で簡潔です。
- パフォーマンスに差はありますか?
-
文字列連結を繰り返す方法は非推奨です。StringBuilder を使う方法が最も効率的です。
- 日本語でも正しく反転できますか?
-
通常の日本語文字列であれば問題ありません。
まとめ
Javaで文字列を左右反転・逆順ソートする方法は複数存在しますが、用途に応じて適切な方法を選ぶことが重要です。
・単純な反転 → StringBuilder.reverse()
・処理理解重視 → 配列操作
・並び替え → Arrays.sort() + reverse
実務では可読性と安全性を重視した実装を選択してください。
文字列を扱う処理では、可変文字列クラスの選択も重要です。
StringBuilder と StringBuffer の違いや使い分けについては、
以下の記事で詳しく解説しています。

