[Dart / Flutter]文字列を比較して順序を比較 compareTo()

文字列の順序を比較したいとき、compareTo()という便利なメソッドがあります。このメソッドを使うことで、2つの文字列の順序を簡単に判別することができます。

文法・構文形式

int str.compareTo(String other)

  • str: 基準となる文字列。
  • other: 比較対象の文字列。

compareTo()メソッドは、基準となるstrと比較対象のotherの2つの文字列を比較して、整数を返します。基本的にUnicodeのコードポイントを基にして文字列の比較を行うため、比較結果はコードポイントの順序に基づいています。

  • 0: 両方の文字列が等しい場合。
  • >0: strotherより辞書順で後にくる場合。
  • <0: strotherより辞書順で前にくる場合。

利用場面

  • 並べ替えやソートの際に文字列の順序を決定する場面。
  • 二つの文字列が同じか異なるかを確認する際。

基本的な比較

String apple = "apple";
String banana = "banana";
int result = apple.compareTo(banana);  // -1 (appleはbananaより前にくる)

同じ文字列の比較

String mango = "mango";
String anotherMango = "mango";
int result = mango.compareTo(anotherMango);  // 0 (両方の文字列が同じ)

漢字を比較する

「山」と「川」を比べると、コードの結果は<0になります。つまり、「山」の方が「川」よりもUnicodeのコードポイントとしては小さい値を持っているということです。

この方法の問題点は、実際の言語のニュアンスや辞書的な順序を考慮しないという点です。言語や文化に特有の順序付けやソートを行いたい場合、専用のライブラリや追加の処理が必要となります。

String yama = "山";
String kawa = "川";
int result = yama.compareTo(kawa);

メリット
  • 文字列の比較を簡単に、かつ明確に行うことができる。
  • ソートのアルゴリズムなどでの使用に便利。
デメリット
  • 大文字小文字の区別がデフォルトで行われるため、大文字小文字を区別しない比較を行いたい場合は追加の処理が必要。
  • Unicodeに基づいて比較するため漢字の読み順による比較はできない。

Dart言語のcompareTo()メソッドは、一見単純な機能に見えるかもしれませんが、文字列を取り扱う多くの場面での比較やソートなどで非常に役立ちます。