Javaでの文字列の比較
1. 概要
この記事では、JavaでStringsを比較するさまざまな方法について説明します。
String はJavaで最もよく使用されるデータ型の1つであるため、これは当然、非常に一般的に使用される操作です。
2. String Stringクラスとの比較
2.1. “ ==”比較演算子の使用
テキスト値を比較するために「==」演算子を使用することは、Java初心者が犯す最も一般的な間違いの1つです。 “ ==”は、2つの文字列 、の参照の同等性のみをチェックするため、これは正しくありません。つまり、同じオブジェクトを参照しているかどうかを意味します。
この動作の例を見てみましょう。
String string1 = "using comparison operator";
String string2 = "using comparison operator";
String string3 = new String("using comparison operator");
assertThat(string1 == string2).isTrue();
assertThat(string1 == string3).isFalse();
上記の例では、2つの変数が同じ String リテラルを指しているため、最初のアサーションはtrueです。
一方、 string1 はリテラルで作成され、string3はnew演算子を使用して作成されるため、2番目のアサーションはfalseです。したがって、これらは異なるオブジェクトを参照します。
2.2. equals()の使用
The 弦クラスは equals() から継承
それらが同じ長さであり、文字が同じ順序である場合、それらは等しいと見なされます。
String string1 = "using equals method";
String string2 = "using equals method";
String string3 = "using EQUALS method";
String string4 = new String("using equals method");
assertThat(string1.equals(string2)).isTrue();
assertThat(string1.equals(string4)).isTrue();
assertThat(string1.equals(null)).isFalse();
assertThat(string1.equals(string3)).isFalse();
この例では、 string1、string2、、および string4 変数は、アドレスに関係なく大文字と小文字と値が同じであるため、等しくなります。
string3 の場合、大文字と小文字が区別されるため、メソッドは false、を返します。
また、2つの文字列のいずれかが null の場合、メソッドはfalseを返します。
2.3. equalsIgnoreCase()の使用
equalsIgnoreCase()メソッドはブール値を返します。 名前が示すように、このメソッドは、文字列を比較するときに文字の大文字小文字の区別を無視します :
String string1 = "using equals ignore case";
String string2 = "USING EQUALS IGNORE CASE";
assertThat(string1.equalsIgnoreCase(string2)).isTrue();
2.4. compareTo()を使用する
compareTo()メソッドは int 型の値を返し、は辞書式順序または自然な順序に基づいて2つの文字列を文字ごとに比較します。
このメソッドは、2つの Strings が等しい場合、または両方が nullの場合、最初の String が引数の前にある場合は負の数、およびより大きい数の場合は0を返します。最初のStringが引数String。の後に来る場合はゼロ
例を見てみましょう:
String author = "author";
String book = "book";
String duplicateBook = "book";
assertThat(author.compareTo(book))
.isEqualTo(-1);
assertThat(book.compareTo(author))
.isEqualTo(1);
assertThat(duplicateBook.compareTo(book))
.isEqualTo(0);
2.5. compareToIgnoreCase()を使用する
compareToIgnoreCase()は、大文字と小文字を区別しないことを除いて、前のメソッドと同様です。
String author = "Author";
String book = "book";
String duplicateBook = "BOOK";
assertThat(author.compareToIgnoreCase(book))
.isEqualTo(-1);
assertThat(book.compareToIgnoreCase(author))
.isEqualTo(1);
assertThat(duplicateBook.compareToIgnoreCase(book))
.isEqualTo(0);
3. String Objectsクラスとの比較
Objects は、静的な equals()メソッドを含むユーティリティクラスであり、このシナリオで役立ちます–2つの文字列を比較します。
このメソッドは、2つの文字列が最初の と等しい場合、アドレスすなわち「 ==」を使用してそれらを比較すると、trueを返します。 ]。 したがって、両方の引数が null の場合は、 true を返し、1つの引数が null の場合は、falseを返します。
それ以外の場合は、渡された引数の型のクラスの equals()メソッドを呼び出すだけです。この場合はStringのクラスequals()メソッドです。 このメソッドは、 Stringクラスのequals()メソッドを内部的に呼び出すため、大文字と小文字が区別されます。
これをテストしてみましょう:
String string1 = "using objects equals";
String string2 = "using objects equals";
String string3 = new String("using objects equals");
assertThat(Objects.equals(string1, string2)).isTrue();
assertThat(Objects.equals(string1, string3)).isTrue();
assertThat(Objects.equals(null, null)).isTrue();
assertThat(Objects.equals(null, string1)).isFalse();
4. String ApacheCommonsとの比較
Apache Commonsライブラリには、文字列関連の操作用のStringUtilsと呼ばれるユーティリティクラスが含まれています。 これには、Stringの比較に非常に有益な方法もいくつかあります。
4.1. equals()および equalsIgnoreCase()の使用
StringUtilsクラスのequals()メソッドは、 Stringクラスメソッドequals()、の拡張バージョンであり、null値も処理します。 :
assertThat(StringUtils.equals(null, null))
.isTrue();
assertThat(StringUtils.equals(null, "equals method"))
.isFalse();
assertThat(StringUtils.equals("equals method", "equals method"))
.isTrue();
assertThat(StringUtils.equals("equals method", "EQUALS METHOD"))
.isFalse();
StringUtilsのequalsIgnoreCase()メソッドは、boolean値を返します。 これは、 equals()、と同様に機能しますが、 Strings:の文字の大文字小文字の区別を無視する点が異なります。
assertThat(StringUtils.equalsIgnoreCase("equals method", "equals method"))
.isTrue();
assertThat(StringUtils.equalsIgnoreCase("equals method", "EQUALS METHOD"))
.isTrue();
4.2. equalsAny()および equalsAnyIgnoreCase()の使用
The equalsAny() メソッドの最初の引数は弦 2番目は複数引数タイプです
それ以外の場合は、falseが返されます。
assertThat(StringUtils.equalsAny(null, null, null))
.isTrue();
assertThat(StringUtils.equalsAny("equals any", "equals any", "any"))
.isTrue();
assertThat(StringUtils.equalsAny("equals any", null, "equals any"))
.isTrue();
assertThat(StringUtils.equalsAny(null, "equals", "any"))
.isFalse();
assertThat(StringUtils.equalsAny("equals any", "EQUALS ANY", "ANY"))
.isFalse();
equalsAnyIgnoreCase()メソッドは、 equalsAny()メソッドと同様に機能しますが、大文字と小文字も無視します。
assertThat(StringUtils.equalsAnyIgnoreCase("ignore case", "IGNORE CASE", "any")).isTrue();
4.3. compare()および compareIgnoreCase()の使用
The 比較() の方法 StringUtils クラスはヌルセーフバージョンのcompareTo() の方法弦クラスとハンドルヌルによる値
さらに、このメソッドを使用して、文字列のリストをnullエントリで並べ替えることができます。
assertThat(StringUtils.compare(null, null))
.isEqualTo(0);
assertThat(StringUtils.compare(null, "abc"))
.isEqualTo(-1);
assertThat(StringUtils.compare("abc", "bbc"))
.isEqualTo(-1);
assertThat(StringUtils.compare("bbc", "abc"))
.isEqualTo(1);
compareIgnoreCase()メソッドは、大文字と小文字を無視することを除いて、同様に動作します。
assertThat(StringUtils.compareIgnoreCase("Abc", "bbc"))
.isEqualTo(-1);
assertThat(StringUtils.compareIgnoreCase("bbc", "ABC"))
.isEqualTo(1);
assertThat(StringUtils.compareIgnoreCase("abc", "ABC"))
.isEqualTo(0);
2つのメソッドは、nullIsLessオプションで使用することもできます。 これはヌル値を少なくするかどうかを決定する3番目のブール引数です。
null の値は、 nullIsLessがtrueの場合は別のStringよりも低く、nullIsLessがfalseの場合は高くなります。
試してみましょう:
assertThat(StringUtils.compare(null, "abc", true))
.isEqualTo(-1);
assertThat(StringUtils.compare(null, "abc", false))
.isEqualTo(1);
3番目のboolean引数を持つcompareIgnoreCase()メソッドは、大文字と小文字を区別しないことを除いて、同様に機能します。
5. 結論
このクイックチュートリアルでは、文字列を比較するさまざまな方法について説明しました。
そして、いつものように、例のソースコードはGitHubのにあります。