Java で文字列配列をアルファベット順に並べ替える

Mohammad Irfan 2023年10月12日
  1. Java の組み込みメソッドを使用せずに文字列配列を並べ替える
  2. Java で stringArraySort() メソッドを使用して文字列配列を並べ替える
  3. Java で compareTo() メソッドを使用して文字列配列を並べ替える
  4. Java で Arrays.sort() メソッドを使用して文字列配列を並べ替える
  5. Java で文字列配列を降順で並べ替える
  6. Java で大文字と小文字を区別せずに文字列配列を並べ替える
  7. Java で文字列配列をアルファベット順に並べ替える
Java で文字列配列をアルファベット順に並べ替える

このチュートリアルでは、Java で文字列配列をアルファベット順に並べ替える方法を紹介します。また、トピックを理解するのに役立つサンプルコードをいくつかリストしました。

並べ替えとは、データを特定の順序で並べ替えることです。整数を昇順または降順で並べ替えることも、英語の文字または単語を辞書式順序で並べ替えることもできます。

辞書式順序は、単語が英語の単語辞書に存在する場合に発生する順序です。このガイドでは、Java で文字列配列を並べ替える方法を説明します。

この記事の文字列を、小さいまたは大きいなどの単語と比較します。辞書式順序に従って最初に出現する場合、一方の文字列はもう一方の文字列よりも小さくなります。

さらに、辞書式順序では、すべて大文字が小文字の前にあります。これは、Z で始まる単語が、ソートされた配列で a で始まる単語の前に存在することを意味します。

Java の組み込みメソッドを使用せずに文字列配列を並べ替える

まず、Java で独自のソート方法を実装しようとします。compareStrings() というメソッドを作成します。このメソッドは、2つの文字列を比較し、どちらが小さいか大きいかを示します。

次に、compareStrings() メソッドを使用して、各文字列を配列に存在する他のすべての文字列と比較し、その文字列を正しい位置に配置します。2つの方法のアルゴリズムを以下に示します。

  1. このメソッドの入力は 2つの文字列になり、整数値を返します。このメソッドの出力は次のとおりです。
    • string1>string2 の場合:正の整数を返します
    • string1<string2 の場合:負の整数を返します
    • string1==string2 の場合:0 を返します
  2. 両方の文字列の各文字を同時にループし、それらの Unicode 値を比較します。組み込みの charAt() メソッドを使用して Unicode 値を取得します。これらの値により、文字を通常の整数であるかのように比較できます。
  3. Unicode 値が両方の文字で同じである場合、各文字列の次の文字に移動します。
  4. Unicode 値が異なる場合は、値の差を返します。
  5. いずれかの文字列の文字がなくなると、ループは終了します。
  6. 2つの文字列の長さがループの外側で異なる場合、この差を返します。これを行うのは、小さい文字列のすべての文字が長い文字列の先頭に存在する可能性があるためです。たとえば、appapplication。この場合、長い方の文字列が小さい方の文字列の後に続きます。
  7. 文字列が同じ長さの場合、単に 0 を返します。これは、2つの文字列が同じであることを示します。

Java で stringArraySort() メソッドを使用して文字列配列を並べ替える

このメソッドは、文字列の配列を入力として受け取り、ソートされた配列を返します。ここでは、2つのループがあり、一方はもう一方にネストされています。これらは、配列の各要素を残りのすべての要素と比較するために使用されます。

ループ内の要素の各ペアに対して compareString() メソッドを使用してそれらを比較します。最初の文字列が他の文字列と比較して大きい場合は、それらの位置を入れ替えます。

完全なコードを以下に示します。

public class Main {
  public static int compareStrings(String word1, String word2) {
    for (int i = 0; i < Math.min(word1.length(), word2.length()); i++) {
      if ((int) word1.charAt(i) != (int) word2.charAt(i)) // comparing unicode values
        return (int) word1.charAt(i) - (int) word2.charAt(i);
    }
    if (word1.length()
        != word2.length()) // smaller word is occurs at the beginning of the larger word
      return word1.length() - word2.length();
    else
      return 0;
  }
  public static String[] stringArraySort(String[] words) {
    for (int i = 0; i < words.length - 1; i++) {
      for (int j = i + 1; j < words.length; j++) {
        if (compareStrings(words[i], words[j]) > 0) // words[i] is greater than words[j]
        {
          String temp = words[i];
          words[i] = words[j];
          words[j] = temp;
        }
      }
    }
    return words;
  }
  public static void main(String[] args) {
    String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
    String[] sortedArr = stringArraySort(arrToSort);

    for (int i = 0; i < sortedArr.length; i++) System.out.print(sortedArr[i] + " ");
  }
}

出力:

Blueberry Strawberry apple bananas oranges

Java で compareTo() メソッドを使用して文字列配列を並べ替える

上記のコードでは、2つの文字列を比較し、整数値を返して、辞書に存在する場合にどちらの文字列が最初に来るかを示すメソッドを記述しました。

Java は、compareTo() と呼ばれる組み込みメソッドを提供します。このメソッドは、この作業を実行できます。このメソッドの構文を以下に示します。

string1.compareTo(string2)

このメソッドの出力は、前に定義した compareStrings() メソッドに似ています。

  • string1>string2 の場合:正の整数を返します
  • string1<string2 の場合:負の整数を返します
  • string1==string2 の場合:0 を返します

次のコードは、Java で compareTo() メソッドがどのように機能するかを示しています。

public class Main {
  public static void main(String[] args) {
    System.out.println("apple".compareTo("orange")); // apple < orange
    System.out.println("AAA".compareTo("aaa")); // AAA < aaa
    System.out.println("ZZZ".compareTo("aaa")); // ZZZ < aaa
    System.out.println("zzz".compareTo("aaa")); // zzz > aaa
    System.out.println("strawberry".compareTo("strawberry")); // strawberry == strawberry
  }
}

出力:

-14
-32
-7
25
0

compareTo() メソッドを使用して配列を並べ替えることができます。このプログラムは、上記の前のプログラムと非常によく似ています。唯一の違いは、前に定義した compareStrings() メソッドの代わりに compareTo() メソッドを使用することです。

public class Main {
  public static String[] stringArraySort(String[] words) {
    for (int i = 0; i < words.length - 1; i++) {
      for (int j = i + 1; j < words.length; j++) {
        if (words[i].compareTo(words[j]) > 0) // words[i] is greater than words[j]
        {
          String temp = words[i];
          words[i] = words[j];
          words[j] = temp;
        }
      }
    }
    return words;
  }
  public static void main(String[] args) {
    String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
    String[] sortedArr = stringArraySort(arrToSort);
    for (int i = 0; i < sortedArr.length; i++) System.out.print(sortedArr[i] + " ");
  }
}

出力:

 Blueberry Strawberry apple bananas oranges

Java で Arrays.sort() メソッドを使用して文字列配列を並べ替える

配列を並べ替えるさらに簡単な方法があります。これを行うには、Arrays クラスの sort() メソッドを使用できます。このメソッドの構文を以下に示します。

Arrays.sort(stringArray)

デフォルトでは、配列を自然な順序で(辞書式順序で)ソートします。ただし、異なるコンパレータを指定することで、この順序を変更できます。

コンパレータは、2つのオブジェクトを比較し、どちらがもう一方よりも小さいか大きいかを判断するために使用される方法です。sort() メソッドは Quicksort アルゴリズムを使用し、O(n*log(n)) の時間計算量を持っています。

次のコードは、sort() メソッドのデフォルトの動作を示しています。

import java.util.Arrays;
public class Main {
  public static void main(String[] args) {
    String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
    Arrays.sort(arrToSort);
    for (int i = 0; i < arrToSort.length; i++) {
      System.out.print(arrToSort[i] + " ");
    }
  }
}

出力:

Blueberry Strawberry apple bananas oranges

Java で文字列配列を降順で並べ替える

配列を自然逆順または降順で並べ替えるには、次に示すように reverseOrder() コンパレータを使用できます。

import java.util.Arrays;
import java.util.Collections;

public class Main {
  public static void main(String[] args) {
    String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
    Arrays.sort(arrToSort, Collections.reverseOrder());
    for (int i = 0; i < arrToSort.length; i++) {
      System.out.print(arrToSort[i] + " ");
    }
  }
}

出力:

oranges bananas apple Strawberry Blueberry

Java で大文字と小文字を区別せずに文字列配列を並べ替える

文字列配列をアルファベット順に設定し、文字の大文字と小文字を区別しない場合は、以下のコード例を使用してください。

import java.util.Arrays;
public class Main {
  public static void main(String[] args) {
    String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
    Arrays.sort(arrToSort, String.CASE_INSENSITIVE_ORDER); // case insensitive sort
    for (int i = 0; i < arrToSort.length; i++) {
      System.out.print(arrToSort[i] + " ");
    }
  }
}

出力:

apple bananas Blueberry oranges Strawberry

Java で文字列配列をアルファベット順に並べ替える

並べ替えとは、要素を特定の順序で並べることです。文字列配列は、アルファベット順または辞書式順序で並べ替えることができます。Java には組み込みの compareTo() メソッドがあり、これを使用して 2つの文字列を比較し、どちらが他方よりも大きいかを判断できます。このメソッドを使用して、ソートアルゴリズムを記述できます。

Java には、文字列配列をソートできる Arrays.sort() メソッドもあります。sort() メソッドにさまざまなコンパレータを使用して、さまざまな方法で配列の順序を設定できます。

関連記事 - Java String

関連記事 - Java Array