文字列と文字列の大きさを比較する(String.compareTo)

String クラスで用意されている compareTo メソッドは、文字列と文字列の大きさを比較し、 2 つの文字列の値が同じならば 0 、どちらかの文字列が大きいまたは小さい場合は正の値または負の値を返します。ここでは Java で文字列と文字列の大きさを比較する方法について解説します。

(Last modified: )

String.compareToメソッドの使い方

文字列と文字列を比較し、まったく同じかそれともどちらかの文字列の方が大きいか小さいかを調べるには String クラスの compareTo メソッドを使います。書式は次のとおりです。

public int compareTo(String anotherString)

パラメータ:
anotherString - 比較対象のString

戻り値:
引数文字列がこの文字列に等しい場合は、値0。この文字列が文字列引数より辞書式に小さい場合は、0より小さい値。この文字列が文字列引数より辞書式に大きい場合は、0より大きい値。

対象の文字列と引数に指定した文字列の大きさを比較します。等しい場合には 0 、対象の文字列が引数に指定した文字列よりも前にある場合は負の値、後にある場合は正の値を返します。

比較は次のように行います。

(1) 文字列の長さが同じで、すべてのインデックスの文字が同じ値だった場合は 0 を返す
(2) 文字列の長さは異なるが、短い方の文字列全体が長い文字列の先頭部分と一致している場合は 対象の文字列.length() - 引数の文字列.length() を返す
(3) 同じインデックスの文字が異なる値があった場合は 対象の文字列.charAt(k) - 引数の文字列.charAt(k) を返す

(2) については例えば ABC と ABCDEF のようなケースです。この場合はそれぞれの文字列の length() メソッドの値を求め、その差を戻り値として返します。

(3) については例えば AAAA と AABA のようなケースです。インデックス 2 の文字の値が異なりますので、それぞれの文字列の charAt(2) の値を求め、その差を戻り値として返します。

次のサンプルを見てください。

String str1 = "AAAAAAAA";
String str2 = "AAAAAAAA";
String str3 = "AAA";
String str4 = "ABCD";

System.out.println(str1.compareTo(str2));  // 0
System.out.println(str1.compareTo(str3));  // 5
System.out.println(str1.compareTo(str4));  // -1

1 つ目と 2 つ目の文字列はまったく同じ値を持つので戻り値は 0 です。 1 つ目と 3 つ目の文字列は 3 つ目の文字列を 1 つ目の文字列がすべて含みますが長さが異なりますので 1 つ目の文字列の長さから 3 つ目の文字列の長さを引いた 5 が戻り値となります。 1 つ目と 4 つ目の文字列はインデックス 1 の文字の値が異なりますので、 1 つ目の文字列の chartAt(1) の値から 2 つ目の文字列の charAt(1) の値を引いた -1 が戻り値となります。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample13-1.java という名前で保存します。

class JSample13_1{
  public static void main(String[] args){
    String str1 = "東京都港区";
    String str2 = "東京都港区";
    String str3 = "東京都";
    String str4 = "東京都中央区";

    System.out.println(str1.compareTo(str2));
    System.out.println(str1.compareTo(str3));
    System.out.println(str1.compareTo(str4));
    System.out.println(str1.charAt(3) + ":" + Integer.toString(str1.charAt(3)));
    System.out.println(str4.charAt(3) + ":" + Integer.toString(str4.charAt(3)));
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample13_1.java

その後で、次のように実行してください。

java JSample13_1

String.compareToメソッドの使い方(1)

文字列と文字列の大きさを比較してそれぞれ結果を出力しました。なお最後の比較の参考までに、文字が異なっている部分の charAt メソッドの戻り値もあわせて出力しました。

-- --

Java で文字列と文字列の大きさを比較する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。