2つの文字列を比較する方法 Java

⚡ スマートサマリー

2 つの文字列を比較する Java 文字シーケンスの等価性や順序を照合する複数の方法を用いて、文字の並びを照合することができます。この資料では、文字列の等価性、オブジェクトの等価性、compareTo、StringUtils メソッド、== 演算子、およびカスタム比較メソッドを含む 7 つのアプローチについて、それぞれ例を交えて解説します。

  • 🟰 文字列のequals(): 大文字小文字を区別して2つの文字列値を比較し、等しい場合はtrue、等しくない場合はfalseを返します。
  • 📦 オブジェクト equals(): 2つの文字列を安全に比較し、2つのnull値を等しいものとして扱います。
  • 🔤 compareTo(): 文字列を辞書式順序で比較し、0、負の数、または正の数を返します。
  • 🧰 StringUtils メソッド: Apache Commons の equals() と equalsAny() は文字列を比較し、null を適切に処理します。
  • ⚠️ == Operaトール: オブジェクトの内容ではなく参照を比較するため、値の比較には使用しないでください。

2つの文字列を比較する方法 Java

文字列を比較するメソッド Java

Java 2つの文字列を比較するために活用できるさまざまな方法を提供します Java. 文字列比較 Java 文字のシーケンスを文字列に一致させる機能です。

文字列を比較する方法を学ぶには Java以下のクラスが提供するメソッドを使用できます。

  • java.langパッケージのStringクラス。
  • java.util パッケージの Objects クラス。
  • org.apache.commons.lang3 パッケージの StringUtils クラス。

これらのほとんど Java 文字列比較メソッドには、大文字小文字を区別しない方法があります。このチュートリアルでは、2つの文字列を比較するために使用できるさまざまなメソッドについて学びます。

方法 1: String equals() メソッド

その Java String 等しい() メソッド 2 つの文字列オブジェクトを比較して、等しい文字列値を探します。

構文:

public boolean equals(Object anObject)

equals() メソッドのパラメータ:

anObject – 文字列を比較するための引数文字列。

equals() メソッドの戻り値の型

  • 指定された文字列リテラルが最初の文字列と同じ場合は true を返します。
  • 最初の文字列が引数の文字列と同じでない場合は false を返します。

例:

public class CompareTwoStrings {
 public static void main(String[] args) {
   String stringOne = "Guru99";
   String stringTwo = "Guru99";
   System.out.println("is Guru99 equal to Guru99: "+stringOne.equals(stringTwo));
   String stringThree = "GURU99";
   System.out.println("is Guru99 equal to GURU99: "+stringOne.equals(stringThree));
  }
}

期待される出力:

is Guru99 equal to Guru99: true
is Guru99 equal to GURU99: false

説明:

  • 指定されたオブジェクトの大文字と小文字が異なるため、最後の出力では false が返されます。

注意: 大文字小文字を区別して文字列を比較するには、文字列の equals() メソッドを使用します。大文字小文字を区別せずに文字列オブジェクトを比較するには、equalsIgnoreCase メソッドを使用します。

方法2: オブジェクトのequals()メソッド

その Java オブジェクトは等しい() メソッドは 2 つの文字列オブジェクトを比較して、同じ値を持つかどうかを確認します。

構文:

public static boolean equals(Object a, Object b)

equals() メソッドのパラメータ

a – 最初の文字列オブジェクトの引数文字列。

b – XNUMX 番目の文字列オブジェクトの引数文字列。

equals() メソッドの戻り値の型

  • 文字列リテラルが等しい場合は true を返します。 XNUMX つの引数に null 値を渡すと、true が返されます。
  • 文字列リテラルが等しくない場合は false を返します。

例:

import java.util.Objects;
public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + Objects.equals(stringOne, stringTwo));
        String stringThree = null;
        String stringFour = null;
        System.out.println("is Guru99 equal to Guru99: " + Objects.equals(stringThree, stringFour));
    }
}

出力:

is Guru99 equal to Guru99: true
is Guru99 equal to Guru99: true

説明:

この例からわかるように、比較対象の文字列は等しいため、出力は真偽値(true)になります。

メソッド 3: String CompareTo() メソッド

その Java 文字列比較() このメソッドは、2 つの文字列をアルファベット順に比較します。これは通常、辞書式順序と呼ばれます。

構文:

public int compareTo(String str)

CompareTo() メソッドのパラメータ

str – 現在の文字列と比較する文字列。

CompareTo() メソッドの戻り値

  • 0 – 指定されたオブジェクトが現在の文字列と等しい場合は、XNUMX を返します。
  • < 0 – この文字列が指定されたオブジェクトより小さい場合、XNUMX より小さい数値を返します。
  • > 0 – この文字列が指定された文字列を超える場合は、XNUMX より大きい数値を返します。

例:

public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + stringOne.compareTo(stringTwo));
        String stringThree = "GURU99";
		// u = 117, U = 85, result = 117-85 = 32
        System.out.println("is Guru99 equal to GURU99: " + stringOne.compareTo(stringThree));
    }
}

期待される出力:

is Guru99 equal to Guru99: 0
is Guru99 equal to GURU99: 32

説明:

最初の結果は、最初の文字列と2番目の文字列が同じであるため、ゼロの値を返します。

2番目の結果は、文字が異なるため、32という値を返します。

注意: 大文字小文字を区別しないためには、「compareToIgnoreCase」メソッドを使用できます。

方法 4: StringUtils equals() メソッド

その Java StringUtils は、() に等しいです。 メソッドは、2 つの文字列の等価性を比較します。

プログラムに「org.apache.commons.lang3」ライブラリが追加されていることを確認してください。これにより、StringUtilsメソッドを使用して文字列を比較できるようになります。

Maven プロジェクトの場合は、これを使用します ガイド をクリックしてライブラリをプロジェクトに追加します。

ただし、ビルドツールを使用せずにライブラリを追加したい場合は、これを使用してください。 ガイド.

構文:

public static boolean equals(CharSequence cs1, CharSequence cs2)

StringUtils equals() メソッドのパラメータ

  • cs1 – 最初の引数の文字のシーケンス。
  • cs2 – XNUMX 番目の引数の文字シーケンス。

StringUtils equals() メソッドの戻り値

  • 文字列比較が等しい場合はtrueを返します。また、2つの引数にnull値を渡した場合も同様です。
  • 文字列の比較が等しくない場合は false を返します。

例:

import org.apache.commons.lang3.StringUtils;
public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + StringUtils.equals(stringOne, stringTwo));
        String stringThree = "GURU99";
        System.out.println("is Guru99 equal to GURU99: " + StringUtils.equals(stringOne, stringThree));
    }
}

出力:

is Guru99 equal to Guru99: true
is Guru99 equal to GURU99: false

説明:

XNUMX 番目と XNUMX 番目の文字列の内容が等しいため、結果は true を返します。

「equalsIgnoreCase」メソッドを使用すると、大文字と小文字を無視できます。

方法 5: StringUtils equalsAny() メソッド

その Java StringUtils は、Any() と等しいです。 メソッドは引数に文字列が存在するかどうかをチェックします。

構文:

public static boolean equalsAny(CharSequence string, CharSequence... searchStrings)

StringUtils equalsAny() メソッドのパラメータ

  • string – 最初の引数の文字列値。 引数には null 値を指定することもできます。
  • searchStrings – 最初の引数文字列が存在するかどうかを検索するためのメソッドの文字列引数のセット。

StringUtils equalsAny() メソッドの戻り値

  • 一致させる文字列が、可変個の検索文字列内に存在する場合にtrueを返します。これは、両方の引数がnullの場合にも適用されます。
  • 一致する文字列が可変数の検索文字列内のどの文字列にも一致しない場合は false を返します。

例:

import org.apache.commons.lang3.StringUtils;
public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String[] stringTwo = new String[] {
            "Guru99",
            "JavaGuru99"
        };
        System.out.println("is Guru99 available: " +
            StringUtils.equalsAny(stringOne, stringTwo));
        String[] stringThree = new String[] {
            "GURU99",
            "JavaGuru99"
        };
        System.out.println("is GURU99 available: " +
            StringUtils.equalsAny(stringOne, stringThree));
    }
}

出力:

is Guru99 available: true
is GURU99 available: false

説明:

最初の文字列と XNUMX 番目の文字列の内容が等しいため、結果は true を返します。 「equalsAnyIgnoreCase」メソッドを使用すると、大文字と小文字を無視できます。

方法6: ==演算子を使用する

文字列の == 演算子は、オブジェクト参照が同じアドレスを持つかどうかをチェックします。

例:

public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 == to Guru99: " + (stringOne == stringTwo));
        String stringThree = "GURU99";
        System.out.println("is Guru99 == to GURU99: " + (stringOne == stringThree));
    }
}

期待される出力:

is Guru99 == to Guru99: true
is Guru99 == to GURU99: false

説明:

  • 最初の結果はブール値「true」を返します。内容が同じ文字列は同じ文字列プールに追加されるため、文字列は同じアドレスを共有します。
  • 2番目の結果はブール値falseを返します。オブジェクトの内容が異なるため、文字列プールも異なります。つまり、文字列はそれぞれ別のオブジェクト参照を持つため、出力はfalseになります。

方法7: XNUMXつの文字列を比較するカスタムメソッドを作成する Java

辞書式順序を使用して 2 つの文字列を比較するメソッドを作成します。

構文:

public static int compareTwoStrings(String str1, String str2)

カスタムメソッドパラメータ

  • str1 – 比較する文字列。
  • str2 – 比較する文字列。

カスタムメソッドの戻り値

  • 0 – 最初の文字列が XNUMX 番目の文字列と等しい場合は、XNUMX を返します。
  • < 0 – 最初の文字列が XNUMX 番目の文字列より小さい場合、XNUMX より小さい数値を返します。
  • > 0 – 最初の文字列が XNUMX 番目の文字列より大きい場合、XNUMX より大きい数値を返します。

例:

public class CompareTwoStrings {
    public static int compareTwoStrings(String stringOne, String stringTwo) {
        int lengthOfStringOne = stringOne.length();
        int lengthOfStringTwo = stringTwo.length();
        int minStringLength = Math.min(lengthOfStringOne, lengthOfStringTwo);
        for (int i = 0; i < minStringLength; i++) {
            char stringOneCharValue = stringOne.charAt(i);
            char stringTwoCharValue = stringTwo.charAt(i);
            if (stringOneCharValue != stringTwoCharValue) {
                return stringOneCharValue - stringTwoCharValue;
            }
        }
        if (lengthOfStringOne != lengthOfStringTwo) {
            return lengthOfStringOne - lengthOfStringTwo;
        } else {
            return 0;
        }
    }
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + compareTwoStrings(stringOne, stringTwo));
    }
}

期待される出力:

is Guru99 equal to Guru99: 0

説明:

結果はゼロの値を返しました。これは、カスタム関数が期待どおりに動作していることを意味します。

よくあるご質問

はい。AIアシスタントは、あなたの目的に応じてequals、compareTo、またはStringUtilsを推奨し、よくある==の落とし穴を指摘してくれます。ただし、特定のデータに対してテストを行い、選択内容を確認することをお勧めします。

はい。AIツールは、コンテンツ比較における「==」の誤用を検出し、代わりに「equals」または「equalsIgnoreCase」を提案します。これにより、文字列を扱う初心者によくある、微妙な等価性に関するバグを減らすことができます。

== 演算子は、オブジェクトの内容ではなく、オブジェクトへの参照を比較します。同じ値を持つ2つの文字列でも参照が異なる場合があるため、== は false を返す可能性があります。値を確実に比較するには、equals() を使用してください。

equals() メソッドは大文字と小文字を区別するため、「Guru「99」と「GURU99」は等しくありません。equalsIgnoreCase() メソッドは、大文字と小文字の違いを無視して文字列を比較し、どちらの場合も true を返します。