Java で文字列を比較する

K. Macharia 2023年10月12日
  1. compareTo() メソッドを用いた Java での文字列の比較
  2. 等式 == 演算子メソッド
  3. equals() メソッド
  4. equals() メソッドの大文字と小文字の区別
  5. contentEquals() メソッド
Java で文字列を比較する

ほとんどすべての Java 開発者は、アプリケーションのロジックを完成させるために 2つの文字列を比較する必要があります。文字列変数は文字の集合です。文字列で可能な比較操作を理解するためには、まず文字列の特性を理解する必要があります。

  1. 文字列は不変です。つまり、文字列は成長することができず、文字列に変更を加えると新しい文字列が形成されます。これは、文字列が内部的に不変の文字列配列に支えられているからです。
  2. 文字列が作成されるというと、異なるメモリ領域に配置された 2つのオブジェクトが作成されます。1つはヒープ領域に作成され、2つ目は String 定数プールに作成されます。文字列の参照は、マシンをヒープ領域のオブジェクトに向けて指し示します。

例えば、

String mystring = "World"

この場合、mystring は文字列 World が格納されているヒープ領域を指す。

以下に、java で文字列を比較するために使われる 4つのメソッドを紹介します。

  1. compareTo() メソッド
  2. 等式 == 演算子
  3. equals() メソッド
  4. contentEquals() メソッド

compareTo() メソッドを用いた Java での文字列の比較

これは、2つの文字列を辞書的に比較します。これは、最初に文字列の各文字に Unicode 値を割り当ててから、文字列を比較することで動作します。この処理は、結果をゼロ、正の数、または負の数で返します。

  1. 比較された 2つの文字列が辞書的に等しい場合、結果はゼロになります。
  2. 最初の文字列が 2 番目の文字列よりも大きい場合、結果は正の値になります。
  3. 2 番目の文字列が 1 番目の文字列よりも大きい場合、結果は負です。

compareTo() メソッドを使用する方法は 2つあります。

2つの文字列を比較する

文字列 1 と文字列 2 を比較してみましょう。これら 2つの文字列を比較して得られる結果は int 型です。例を示します。

public class CompareToCode {
  public static void main(String args[]) {
    String string1 = "now";
    String string2 = "now";
    int result = string1.compareTo(string2);
    System.out.println(result);
  }
}

出力:

0

文字列とオブジェクトの比較

また、compareTo() メソッドは、参照されていないオブジェクトを文字列と比較することもできます。例を示します。

public class CompareTo {
  public static void main(String args[]) {
    String string1 = "now";
    int result = string1.compareTo("now");
    System.out.println(result);
  }
}

出力:

0

compareTo() 大文字小文字の区別

compareTo() メソッドは大文字小文字を区別します。つまり、2つの文字列が同じであっても、統一されていなければ異なるものとして表示されるということです。例を示します。

public class CompareTo {
  public static void main(String args[]) {
    String string1 = "hello";
    String string2 = "HELLO";
    int result = string1.compareTo(string2);
    System.out.println(result);
  }
}

出力:

-32

ワールド helloHELLO は上記とは異なる処理をしているため、-32 という結果が得られます。

しかし、この文字列クラスの別のメソッドは大文字小文字の区別を無視します - compareToIgnoreCase()。例を示します。

public class CompareToIgnoreCase {
  public static void main(String args[]) {
    String string1 = "hello";
    String string2 = "HELLO";
    int result = string1.compareToIgnoreCase(string2);
    System.out.println(result);
  }
}

出力:

0

等式 == 演算子メソッド

これは、2つのオブジェクトが同じメモリ位置にあるかどうかを比較する java の文字列比較メソッドです。例を示します。

public class EqualityOperator {
  public static void main(String args[]) {
    String oneS = new String("Wow");
    String twoS = new String("Wow");
    System.out.println(oneS == twoS);
  }
}

出力:

false

演算子 ==oneStwoS オブジェクトを比較して、同じかどうかを調べます。文字列である oneStwoS はどちらも異なる参照であるため、false を返します。oneStwoS は二つの異なるオブジェクトです。しかし、どちらも同じ値を持っています。

equals() メソッド

これは、java で 2つの文字列を値に基づいて比較するために使用されるメソッドです。このメソッドの出力は、真または偽のどちらかです。比較される文字列が値によって等しくない場合、このメソッドは false を返します。比較される文字列が等しい場合、このメソッドは真を返します。例えば、

public class Equals {
  public static void main(String args[]) {
    String oneS = new String("Wow");
    String twoS = new String("Wow");
    System.out.println(oneS.equals(twoS));
  }
}

出力:

true

equals() メソッドの大文字と小文字の区別

equals() メソッドは大文字小文字を区別します。例えば、

public class Equals {
  public static void main(String args[]) {
    String oneS = new String("Wow");
    String twoS = new String("WOW");
    System.out.println(oneS.equals(twoS));
  }
}

出力:

false

上記のケースでは、equals() メソッドを用いて wowWOW を比較した場合、wow は false を返します。

しかし、equals() メソッドを使用して大文字小文字の区別を考慮しないようにしたい場合は、equalsToIgnoreCase() メソッドを使用します。上の例では、equalsIgnoreCase() は真を返します。

public class EqualsIgnorecase {
  public static void main(String args[]) {
    String oneS = new String("Wow");
    String twoS = new String("WOW");
    System.out.println(oneS.equalsIgnoreCase(twoS));
  }
}

出力:

true

contentEquals() メソッド

これは、文字列バッファと文字列を比較して、falsetrue のどちらかを返す java の文字列比較メソッドでもあります。文字列が比較対象の文字列バッファと一致する場合、このメソッドは true を返します。文字列が比較対象の文字列バッファと一致しない場合、このメソッドは false を返します。

例を示します。

public class ContentEquals {
  public static void main(String args[]) {
    String firstS = new String("Here we are");
    StringBuffer secondS = new StringBuffer("Here we are");
    System.out.println(firstS.contentEquals(secondS));
  }
}

出力:

true

関連記事 - Java String