Java で Arrays.sort() を使って文字列をソートする

JavaJavaBeginner
オンラインで実践に進む

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Java において、String クラス内にソート用の単一のメソッドはありません。ただし、文字配列を様々なアルゴリズムを使って簡単にソートできるという事実を利用することができます。Java で文字列をソートする方法は複数あり、Arrays.sort() を使う方法、Arrays.sort() 内の Comparator を使う方法、または 選択ソートバブルソート のような一般的なソートアルゴリズムを使う方法などがあります。この実験では、Arrays.sort() メソッドを使って Java で文字列をソートする方法を探ります。

コードを記述する

このステップでは、Arrays.sort() 関数を使って文字列をソートする Java プログラムを記述します。コードは入力文字列を受け取り、それを文字配列に変換し、Arrays.sort() 関数を使って配列をソートし、その後再度文字列を変換します。

import java.util.Arrays;

public class SortString {
    public static void main(String[] args) {
        String originalString = "The quick brown fox jumps over the lazy dog";
        String sortedString = "";
        char[] tempArr = originalString.toCharArray();   // 文字列を文字配列に変換
        Arrays.sort(tempArr);   // 文字配列をソート
        sortedString = new String(tempArr);   // ソート済みの文字配列を文字列に変換
        System.out.println("Original String: " + originalString);
        System.out.println("Sorted String: " + sortedString);
    }
}

コードをコンパイルして実行する

ターミナルを開き、~/project ディレクトリに移動します。次のコマンドを使って Java プログラムをコンパイルします。

javac SortString.java

次のコマンドを使って Java プログラムを実行します。

java SortString

プログラムの出力は次のようになります。

Original String: The quick brown fox jumps over the lazy dog
Sorted String:    Tabcdeeefghhijklmnoooopqrrstuuvwxyz

大文字小文字を区別せずにソートする実装

Java では、Arrays.sort() メソッドは文字を Unicode 値を使って比較します。大文字小文字を区別せずに文字列をソートするには、Comparator を使ってソートアルゴリズムを変更することができます。このステップでは、前の Java コードを編集して、大文字小文字を区別せずに文字列をソートします。

import java.util.Arrays;
import java.util.Comparator;

public class SortString {
    public static void main(String[] args) {
        String originalString = "The quick brown fox jumps over the lazy dog";
        String sortedString = "";
        Character[] tempArr = toCharacterArray(originalString.toLowerCase());   // 小文字の文字列を Character 配列に変換
        Arrays.sort(tempArr, new Comparator<Character>() {   // 大文字小文字を区別しないコンパレータでソート
            @Override
            public int compare(Character c1, Character c2) {
                return c1.compareTo(c2);
            }
        });
        StringBuilder sb = new StringBuilder(tempArr.length);   // StringBuilder オブジェクトを作成
        for (Character c : tempArr) {
            sb.append(c.charValue());   // ソート済みの文字を StringBuilder オブジェクトに追加
        }
        sortedString = sb.toString();   // StringBuilder オブジェクトを文字列に変換
        System.out.println("Original String: " + originalString);
        System.out.println("Sorted String: " + sortedString);
    }

    // 文字列を Character 配列に変換するメソッド
    private static Character[] toCharacterArray(String str) {
        Character[] arr = new Character[str.length()];
        for (int i = 0; i < str.length(); i++) {
            arr[i] = str.charAt(i);
        }
        return arr;
    }
}

更新されたコードをコンパイルして実行する

次のコマンドを使って更新された Java プログラムをコンパイルします。

javac SortString.java

次のコマンドを使って Java プログラムを実行します。

java SortString

プログラムの出力は次のようになります。

Original String: The quick brown fox jumps over the lazy dog
Sorted String:    abcdeeefghhijklmnoooopqrrsttuuvwxyz

従来の方法を使ったソートの実装

このステップでは、従来のネストしたループを使った方法で文字配列のソートを実装します。このアルゴリズムは、各文字をその右の文字と比較し、右の文字が現在の文字より小さい場合に文字を交換します。

import java.util.Arrays;

public class SortString {
    public static void main(String[] args) {
        String originalString = "The quick brown fox jumps over the lazy dog";
        String sortedString = "";
        char[] tempArr = originalString.toCharArray();   // 文字列を文字配列に変換
        int n = tempArr.length;
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                if (tempArr[i] > tempArr[j]) {
                    char temp = tempArr[i];
                    tempArr[i] = tempArr[j];
                    tempArr[j] = temp;
                }
            }
        }
        sortedString = new String(tempArr);   // ソート済みの文字配列を文字列に変換
        System.out.println("Original String: " + originalString);
        System.out.println("Sorted String: " + sortedString);
    }
}

更新されたコードをコンパイルして実行する

前のコマンドを使って更新された Java プログラムをコンパイルします。

javac SortString.java

次のコマンドを使って Java プログラムを実行します。

java SortString

プログラムの出力は次のようになります。

Original String: The quick brown fox jumps over the lazy dog
Sorted String:    Tabcdeeefghhijklmnoooopqrrstuuvwxyz

まとめ

この実験では、Java で Arrays.sort() メソッドを使って文字列をソートする方法を学びました。また、Comparator を使った大文字小文字を区別しないソートとネストしたループを使った従来のソートの実装方法も学びました。