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

Javaで文字列をソートする方法を解説!サンプルコード付き

この記事では、Javaを使って文字列(String)をソートする方法について詳しく解説します。文字列とは、1つ以上の文字が並んだデータ型で、ダブルクォーテーション(" ")で囲まれた文字のシーケンスのことを指します。

ここでは、バブルソートの考え方を応用して、文字列内の各文字をアルファベット順に並べ替えるプログラムを紹介します。

処理内容の確認

まず、今回実装するプログラムの入力と出力を見てみましょう。

入力例

入力文字列:javaprogram

出力例

ソート後の文字列:[a, a, a, g, j, m, o, p, r, r, v]

このように、「javaprogram」という文字列に含まれる各文字が、アルファベット順(昇順)に並べ替えられていることがわかります。

アルゴリズムの手順

文字列をソートするための基本的な手順は以下の通りです。

ステップ1 − 処理を開始する
ステップ2 − 文字列変数 input_string、文字配列 charArray、一時保存用のchar変数 temp、int型変数 string_size を宣言する
ステップ3 − 各変数に値を設定する
ステップ4 − 文字列をtoCharArray()メソッドで文字配列に変換して代入する
ステップ5 − 配列の要素を二重ループで走査し、隣接する要素の大小関係を比較する。順序が正しくない場合はtemp変数を使って要素を入れ替える
ステップ6 − ソート後の配列を表示する
ステップ7 − 処理を終了する

例1:mainメソッド内にすべての処理を記述する方法

まずは、すべての処理を「main」メソッド内にまとめて記述するシンプルな例から見ていきましょう。

import java.util.Arrays;
public class SortString {
   public static void main(String args[]) {
      int temp, string_size;
      String input_string = "javaprogram";
      System.out.println("定義された文字列:" +input_string);
      char charArray[] = input_string.toCharArray();
      string_size = charArray.length;
      for(int i = 0; i < string_size; i++ ) {
         for(int j = i+1; j < string_size; j++) {
            if(charArray[i]>charArray[j]) {
               temp = charArray[i];
               charArray[i] = charArray[j];
               charArray[j] = (char) temp;
            }
         }
      }
      System.out.println("\nソート後の文字列の各文字:"+Arrays.toString(charArray));
   }
}

実行結果

定義された文字列:javaprogram

ソート後の文字列の各文字:[a, a, a, g, j, m, o, p, r, r, v]

コードのポイント:

  • toCharArray()メソッド:文字列をchar型の配列に変換します。これにより各文字に個別にアクセスできるようになります。
  • 二重ループによる比較:外側のループで基準位置を決め、内側のループでそれ以降の文字と比較します。
  • temp変数による交換:大小関係が逆の場合、3つの代入文を使って2つの文字を入れ替えます。これはバブルソートの典型的な手法です。

例2:オブジェクト指向スタイルで関数に分割する方法

次に、ソート処理を独立したメソッドとして切り出し、オブジェクト指向プログラミング(OOP)の考え方に沿って実装する例を紹介します。処理をメソッド化することで、コードの再利用性と可読性が向上します。

import java.util.Arrays;
public class SortString {
   static void sort(String input_string){
      int temp, string_size;
      char charArray[] = input_string.toCharArray();
      string_size = charArray.length;
      for(int i = 0; i < string_size; i++ ) {
         for(int j = i+1; j < string_size; j++) {
            if(charArray[i]>charArray[j]) {
               temp = charArray[i];
               charArray[i] = charArray[j];
               charArray[j] = (char) temp;
            }
         }
      }
      System.out.println("\nソート後の文字列の各文字:"+Arrays.toString(charArray));
   }
   public static void main(String args[]) {
      String input_string = "javaprogram";
      System.out.println("定義された文字列:" +input_string);
      sort(input_string);
   }
}

実行結果

定義された文字列:javaprogram

ソート後の文字列の各文字:[a, a, a, g, j, m, o, p, r, r, v]

補足:より簡単な代替手段

上記のような自作のソート処理を実装しなくても、Java標準ライブラリのArrays.sort()メソッドを使えば、1行で文字配列をソートできます。

char charArray[] = input_string.toCharArray();
Arrays.sort(charArray);

また、chars()メソッドとストリームAPIを組み合わせれば、よりモダンな書き方も可能です。

String sorted = input_string.chars()
   .sorted()
   .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
   .toString();

まとめ

本記事では、Javaで文字列をソートする2つの実装方法(mainメソッドにまとめる方法と、メソッドに分割するOOP的な方法)を紹介しました。どちらも基本となるのは「文字列をchar配列に変換し、二重ループで比較・交換を行う」という流れです。学習段階ではソートアルゴリズムを自力で実装してみることが理解を深める近道ですが、実務ではArrays.sort()などの標準ライブラリを活用するのが効率的です。ぜひ両方のアプローチを試してみてください。

  1. Javaで文字列をアルファベット順にソートする2つの方法を解説

    Javaでは、文字列を構成する文字をアルファベット順に並べ替えたい場面がよくあります。この記事では、代表的な2つの方法――toCharArray()メソッドとArrays.sort()を組み合わせる方法、そしてループ処理で手動的にソートする方法――を、サンプルコード付きでわかりやすく解説します。 toCharArray()メソッドを使う方法 StringクラスのtoCharArray()メソッドは、文字列をchar型の配列に変換して返します。これをArraysクラスのsort()メソッドと組み合わせることで、短いコードで文字列をアルファベット順にソートできます。 手順は以下の通りです。 対象

  2. Javaで文字列内の母音をカウントする方法をわかりやすく解説

    Javaでは、拡張forループと条件分岐を組み合わせることで、文字列に含まれる母音(a、e、i、o、u)の数を簡単にカウントできます。この記事では、基本的な実装方法をサンプルコード付きで解説します。 カウントの仕組み まず、カウント用の変数 count を 0 で初期化します。これは、母音の数をこの変数に加算していくためです。 次に、toCharArray() メソッドを使って文字列を1文字ずつ取り出し、Character.toLowerCase() ですべて小文字に変換します。これにより、大文字・小文字を区別せずに母音を判定できるようになります。 for(char ch : myStr.t