Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaで文字列を逆順にする最も簡単な方法は?reverse()メソッドの使い方を解説


組み込みのreverse()メソッドを使う(最も簡単な方法)

Javaで文字列を逆順にする最も簡単な方法は、StringBufferクラスが提供するreverse()メソッドを使用することです。このメソッドは、現在のStringBufferオブジェクトの内容を反転し、その結果を新しいStringBufferオブジェクトとして返します。

手順は次の通りです。

  • 反転したい文字列を引数に渡して、StringBufferクラスのインスタンスを生成します。
  • 生成したオブジェクトのreverse()メソッドを呼び出します。
  • toString()メソッドを使って、再びString型に変換します。

サンプルコード

public class Sample {
    public static void main(String args[]) {
        String str = new String("Hello how are you");
        StringBuffer sb = new StringBuffer(str);
        String str2 = sb.reverse().toString();
        System.out.println(str2);
    }
}

実行結果

uoy era woh olleH

なお、マルチスレッド環境で使用しない場合は、より軽量で高速なStringBuilderクラスにも同じreverse()メソッドが用意されているため、通常はStringBuilderを選ぶのが一般的です。

続いて、文字列を逆順にするその他の方法を2つ紹介します。

再帰(リカージョン)を使う方法

再帰とは、関数が自分自身を呼び出す処理手法のことです。以下のJavaプログラムでは、再帰を使って文字列を逆順にしています。文字列が空になるまで先頭の1文字を取り除きながら自分自身を呼び出し、処理が戻る際に先頭だった文字を末尾へ連結していくことで、文字列全体が反転される仕組みです。

サンプルコード

public class StringReverse {
    public String reverseString(String str) {
        if(str.isEmpty()) {
            return str;
        }else {
            return reverseString(str.substring(1))+str.charAt(0);
        }
    }
    public static void main(String[] args) {
        StringReverse obj = new StringReverse();
        String result = obj.reverseString("Tutorialspoint");
        System.out.println(result);
    }
}

実行結果

tniopslairotuT

ただし、再帰では呼び出しごとに新しい文字列オブジェクトが生成されるため、長い文字列ではパフォーマンスが低下しやすく、深い再帰によってスタックオーバーフローが発生するリスクもあります。学習目的や短い文字列の処理に向いた方法です。

toCharArray()を使う方法

文字列をchar型の配列に変換し、配列内の文字を直接入れ替える方法もあります。

配列を反転させるには、最初の要素と最後の要素、2番目の要素と後ろから2番目の要素というように、両端から順にペアを入れ替えていきます。配列の長さが奇数の場合は、中央の要素をそのまま残します。

具体的には、先頭側の要素をarray[i]とすると、それに対応する末尾側の要素はarray[配列の長さ − i − 1]となります。この2つの要素を、配列の先頭から中央まで順に入れ替えていくことで反転が完了します。

サンプルコード

import java.util.Arrays;
public class StringReverse {
    public static void main(String[] args) {
        String str = "Tutorialspoint";
        char[] myArray = str.toCharArray();
        int size = myArray.length;
        for (int i = 0; i < size / 2; i++) {
            char temp = myArray[i];
            myArray[i] = myArray[size - 1 - i];
            myArray[size - 1 - i] = temp;
        }
        System.out.println("Array after reverse:: ");
        System.out.println(Arrays.toString(myArray));
    }
}

実行結果

Array after reverse::
[t, n, i, o, p, s, l, a, i, r, o, t, u, T]

まとめ

手軽さを重視するなら、StringBuffer(またはStringBuilder)のreverse()メソッドを使うのがベストです。一方、再帰や配列の入れ替えによる実装は、アルゴリズムへの理解を深めたり、技術面接の対策をする際に役立つ知識となります。用途に応じて適切な方法を選びましょう。

  1. JavaのStringIndexOutOfBoundsExceptionとは?発生原因と対処法をわかりやすく解説

    StringIndexOutOfBoundsExceptionとはJavaにおいて、文字列(String)は一連の文字を格納するために使用され、オブジェクトとして扱われます。文字列は、java.langパッケージに含まれるStringクラスによって表現されます。文字列の作成方法は主に2つあります。1つは他のオブジェクトと同様にnewキーワードを使用する方法、もう1つはプリミティブ型のようにリテラルを直接代入する方法です。String stringObject = new String(Hello how are you); String stringLiteral = Welcome to T

  2. JavaのString intern()メソッドとは?その役割と使い方をわかりやすく解説

    JavaにおけるStringクラスの基本Stringは、Javaで一連の文字(文字列)を格納するためのクラスで、java.langパッケージに属しています。Stringオブジェクトは一度生成すると内容を変更できない「イミュータブル(不変)」という特性を持っています。文字列の保存場所すべてのStringオブジェクトは、ヒープ領域内にある「文字列定数プール(String Constant Pool)」と呼ばれる専用のメモリ領域に格納されます。文字列リテラルを定義するたびに、JVMは文字列定数プール内にその値を持つStringオブジェクトを生成します。そのため、同じ内容の文字列リテラルが複数存在して