Java で文字列を並べ替える
このチュートリアル記事では、Java で単一の文字列を並べ替える方法を説明します。
最も一般的に使用される順序はアルファベット順です。ソートとは、データを標準フォーマットに変換し、人間が読めるフォーマットを作成するプロセスです。
Java で単一の文字列をソートするには、以下の 2つの方法があります。
Array.sort()
メソッド- ユーザー定義メソッド
Java で Array.sort()
メソッドを使用して単一の文字列を並べ替える
Java では文字列は不変であり、一度文字列オブジェクトを作成してしまうとメモリ上で文字列を変更することができません。また、文字列中の一文字にアクセスすることもできません。
Java で単一の文字列をソートするには、Array.sort()
メソッドを使用することができます。文字列クラスにはソートメソッドがありません。文字列をソートする際の主な考え方は、toCharArray()
メソッドを使って与えられた文字列を文字の配列に変換することです。そして、Arrays.sort()
メソッドを使ってその配列をソートします。
Arrays.sort()
メソッドを用いて単一の文字列をソートする例は以下の通りです。
import java.util.Arrays;
public class StringSorting {
public static void main(String args[]) {
String STR = "java";
char[] StringtoChar = STR.toCharArray();
Arrays.sort(StringtoChar);
String SortedString = new String(StringtoChar);
System.out.println("The Unsorted String is : " + STR);
System.out.println("The Sorted String is : " + SortedString);
}
}
出力:
The Unsorted String is : java
The Sorted String is : aajv
上記のコードでは、java
を格納した文字列を作成しています。これを toCharArray()
メソッドで文字配列に変換した後、Arrays.sort
メソッドで文字配列をソートし、ソートした配列を文字列に型キャストします。
Java で単一の文字列をソートするために for
ループを使用する
for
ループを使って単一の配列をソートし、反復のたびに要素を他の要素と比較することができます。しかし、ご存知のように、文字列を文字配列に変換するために文字列中の 1つの文字にアクセスすることはできません。そこで、2つのループを使って文字配列を反復し、それぞれの要素を他の要素と比較します。
ユーザー定義メソッドを用いて単一の文字列をソートする例は以下の通りです。
import java.util.Arrays;
public class StringSorting {
public static void main(String args[]) {
String STR = "java";
char[] StringtoChar = STR.toCharArray();
for (int i = 0; i < (StringtoChar.length - 1); i++) {
for (int j = i + 1; j > 0; j--) {
if (StringtoChar[j] < StringtoChar[j - 1]) {
char Temp = StringtoChar[j - 1];
StringtoChar[j - 1] = StringtoChar[j];
StringtoChar[j] = Temp;
}
}
}
String SortedString = new String(StringtoChar);
System.out.println("The Unsorted String is : " + STR);
System.out.println("The Sorted String is : " + SortedString);
}
}
出力:
The Unsorted String is : java
The Sorted String is : aajv
上記のコードでは、java
を格納した文字列を作成しています。
ここでは 2つの for
ループを使用します。1つ目のループは文字配列の反復処理であり、2つ目のループは比較の繰り返しを避けるためのものです。2つ目のループ内で条件(StringtoChar[j]<StringtoChar[j-1]
)が真であれば、文字列の入れ替えと配列のソートを行います。