はじめに
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 を使った大文字小文字を区別しないソートとネストしたループを使った従来のソートの実装方法も学びました。



