115

2 つの文字列を比較する Java プログラムを作成しました。

String str = "Hello";

if (str.equals("hello")) {
    System.out.println("match");
} else {
    System.out.println("no match");
}

大文字と小文字が区別されます。そうでないようにするにはどうすれば変更できますか?

4

12 に答える 12

182

最良の方法は、を使用することstr.equalsIgnoreCase("foo")です。この目的のために特別に最適化されています。

と比較する前に、両方の文字列を大文字または小文字に変換することもできますequals。これは、 に相当するものがない他の言語で覚えておくと便利なトリックですequalsIgnoreCase

str.toUpperCase().equals(str2.toUpperCase())

equalsIgnoreCaseローマ字以外を使用している場合は、JavaDoc のこの部分に注意してください。

このメソッドはロケールを考慮しないため、特定のロケールでは不十分な結果になることに注意してください。Collat ​​or クラスは、ロケールに依存した比較を提供します。

于 2010-02-08T08:52:35.020 に答える
44

を使用しString.equalsIgnoreCase()ます。

Java API リファレンスを使用して、次のような答えを見つけてください。

https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#equalsIgnoreCase(java.lang.String)

https://docs.oracle.com/javase/1.5.0/docs/api/

于 2010-02-08T08:52:20.730 に答える
22

compareToIgnoreCaseオブジェクトのメソッドを使用する必要がありStringます。

int compareValue = str1.compareToIgnoreCase(str2);

if (compareValue == 0)str1等しいことを意味しstr2ます。

于 2012-05-01T05:09:56.387 に答える
5

デフォルトの Java API には次のものがあります。

String.CASE_INSENSITIVE_ORDER

したがって、並べ替えられたデータ構造で文字列を使用する場合は、コンパレータを書き直す必要はありません。

String s = "some text here";
s.equalsIgnoreCase("Some text here");

独自のコードでの純粋な等値チェックに必要なものです。

Java での文字列の等価性に関するあらゆる情報について詳しく説明します。java.lang.String クラスの hashCode() 関数は「大文字と小文字を区別します」:

public int hashCode() {
    int h = hash;
    if (h == 0 && value.length > 0) {
        char val[] = value;

        for (int i = 0; i < value.length; i++) {
            h = 31 * h + val[i];
        }
        hash = h;
    }
    return h;
}

したがって、文字列をキーとして Hashtable/HashMap を使用し、"SomeKey"、"SOMEKEY"、"somekey" などのキーが等しいと見なされる場合は、別のクラスで文字列をラップする必要があります (拡張することはできません)。最終クラスなので文字列)。例えば ​​:

private static class HashWrap {
    private final String value;
    private final int hash;

    public String get() {
        return value;
    }

    private HashWrap(String value) {
        this.value = value;
        String lc = value.toLowerCase();
        this.hash = lc.hashCode();
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o instanceof HashWrap) {
            HashWrap that = (HashWrap) o;
            return value.equalsIgnoreCase(that.value);
        } else {
            return false;
        }
    }

    @Override
    public int hashCode() {
        return this.hash;
    }
}

そしてそれをそのまま使用します:

HashMap<HashWrap, Object> map = new HashMap<HashWrap, Object>();
于 2013-08-21T13:36:14.533 に答える
2

.equals または .equalsIgnoreCase を実行する前に、それらに対しても null チェックを実行したい場合があることに注意してください。

null String オブジェクトは equals メソッドを呼び出すことはできません。

すなわち:

public boolean areStringsSame(String str1, String str2)
{
    if (str1 == null && str2 == null)
        return true;
    if (str1 == null || str2 == null)
        return false;

    return str1.equalsIgnoreCase(str2);
}
于 2013-04-09T03:57:33.300 に答える
2

使用s1.equalsIgnoreCase(s2): https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#equalsIgnoreCase(java.lang.String)

于 2010-02-08T08:53:05.207 に答える
1

equalsIgnoreCaseを使用できます

于 2010-02-08T08:53:43.223 に答える
1

文字列の詳細については、文字列クラスおよび文字列チュートリアルを参照してください。

于 2010-02-08T08:57:05.343 に答える
-6
public boolean newEquals(String str1, String str2)
{
    int len = str1.length();
int len1 = str2.length();
if(len==len1)
{
    for(int i=0,j=0;i<str1.length();i++,j++)
    {
        if(str1.charAt(i)!=str2.charAt(j))
        return false;
    }`enter code here`
}
return true;
}
于 2013-11-15T05:28:14.997 に答える