2 つの文字列を比較する Java プログラムを作成しました。
String str = "Hello";
if (str.equals("hello")) {
System.out.println("match");
} else {
System.out.println("no match");
}
大文字と小文字が区別されます。そうでないようにするにはどうすれば変更できますか?
2 つの文字列を比較する Java プログラムを作成しました。
String str = "Hello";
if (str.equals("hello")) {
System.out.println("match");
} else {
System.out.println("no match");
}
大文字と小文字が区別されます。そうでないようにするにはどうすれば変更できますか?
最良の方法は、を使用することstr.equalsIgnoreCase("foo")
です。この目的のために特別に最適化されています。
と比較する前に、両方の文字列を大文字または小文字に変換することもできますequals
。これは、 に相当するものがない他の言語で覚えておくと便利なトリックですequalsIgnoreCase
。
str.toUpperCase().equals(str2.toUpperCase())
equalsIgnoreCase
ローマ字以外を使用している場合は、JavaDoc のこの部分に注意してください。
このメソッドはロケールを考慮しないため、特定のロケールでは不十分な結果になることに注意してください。Collat or クラスは、ロケールに依存した比較を提供します。
を使用しString.equalsIgnoreCase()
ます。
Java API リファレンスを使用して、次のような答えを見つけてください。
compareToIgnoreCase
オブジェクトのメソッドを使用する必要がありString
ます。
int compareValue = str1.compareToIgnoreCase(str2);
if (compareValue == 0)
str1
等しいことを意味しstr2
ます。
デフォルトの 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>();
.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);
}
使用s1.equalsIgnoreCase(s2)
: https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#equalsIgnoreCase(java.lang.String)。
equalsIgnoreCaseを使用できます
文字列の詳細については、文字列クラスおよび文字列チュートリアルを参照してください。
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;
}