Javaで文字列を比較する

Javaでの文字列の比較

1. 概要

この記事では、JavaでStringsを比較するさまざまな方法について説明します。

StringはJavaで最も使用されるデータ型の1つであるため、これは当然、非常に一般的に使用される操作です。

2. StringStringクラスの比較

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はリテラルで作成され、string3new演算子を使用して作成されるため、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. StringObjectsクラスの比較

Objectsは、静的なequals()メソッドを含むユーティリティクラスであり、このシナリオで役立ちます– 2つのStrings.を比較します

2つのStringsfirstcomparing 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();

StringUtilsequalsIgnoreCase()メソッドは、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にあります。