Javaでの文字列の比較
1. 概要
この記事では、JavaでStringsを比較するさまざまな方法について説明します。
StringはJavaで最も使用されるデータ型の1つであるため、これは当然、非常に一般的に使用される操作です。
2. StringとStringクラスの比較
2.1. “==”比較演算子の使用
「==」演算子を使用してテキスト値を比較することは、Java初心者が犯す最も一般的な間違いの1つです。 “==” only checks the referential equality of two Strings,は、同じオブジェクトを参照しているかどうかを意味するため、これは正しくありません。
この動作の例を見てみましょう。
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()の使用
Stringクラスは、Object.から継承されたequals()をオーバーライドしますThis method compares two Strings character by character, ignoring their address.
それらが同じ長さであり、文字が同じ順序である場合、それらは等しいと見なされます。
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()メソッドはブール値を返します。 名前が示すように、このメソッドignores casing in characters while comparing Strings:
String string1 = "using equals ignore case";
String string2 = "USING EQUALS IGNORE CASE";
assertThat(string1.equalsIgnoreCase(string2)).isTrue();
2.4. compareTo()の使用
compareTo()メソッドは、ディクショナリまたは自然な順序に基づいて、intタイプの値とcompares two Strings character by character lexicographicallyを返します。
このメソッドは、2つのStringsが等しい場合、または両方がnull,である場合、最初のStringが引数の前にある場合は負の数、最初のStringがゼロより大きい場合は0を返します。 sは引数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つのStrings.を比較します
2つのStringsがfirstcomparing them using their addressと等しい場合、つまり「==”」の場合、メソッドはtrueを返します。 したがって、両方の引数がnullの場合は、trueを返し、1つの引数がnullの場合は、falseを返します。
それ以外の場合は、渡された引数の型のクラスのequals()メソッドを呼び出すだけです。この場合はString’sクラス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. StringApache Commonsとの比較
The Apache Commons library contains a utility class called StringUtils for String-related operations;これには、Stringの比較に非常に有益な方法もいくつかあります。
4.1. equals() andの使用 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値を返します。 これは、Strings:の文字の大文字と小文字を無視することを除いて、equals(),と同様に機能します。
assertThat(StringUtils.equalsIgnoreCase("equals method", "equals method"))
.isTrue();
assertThat(StringUtils.equalsIgnoreCase("equals method", "EQUALS METHOD"))
.isTrue();
4.2. equalsAny()と equalsAnyIgnoreCase()
equalsAny()メソッドの最初の引数はStringで、2番目はマルチ引数タイプCharSequence.です。他の指定されたStringsのいずれかが一致する場合、メソッドはtrueを返します。最初のStringの場合に対して敏感に。
それ以外の場合、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()
StringUtilsクラスのcompare()メソッドは、Stringクラスのnull-safe version of the compareTo()メソッドであり、null値をconsidering a null value less than a non-null value. 2つのnull値で処理します。等しいと見なされます。
さらに、このメソッドを使用して、nullエントリを持つStringsのリストを並べ替えることができます。
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オプションとともに使用することもできます。 これはa third boolean argument which decides if null values should be considered less or notです。
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. 結論
このクイックチュートリアルでは、Strings.を比較するさまざまな方法について説明しました。
そして、いつものように、例のソースコードはover on GitHubにあります。