[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください
この記事では、文字列が一致するかどうかを比較する方法について解説します。
どちらの文字列が辞書的に先か後かを比較する方法については、こちらの記事をご覧ください。
文字列を単純に比較するには == を使用する
まず、文字列を単純に比較するだけであれば、Scalaでは==演算子を使用すればOKです。
val title = "Scala逆引き解説 Scalapedia" val target = "scala逆引き解説 SCALAPEDIA"
println(target == title)
出力は以下のようになります。
false
大文字・小文字の違いがあるので、比較した結果もfalseとなります。
equalsIgnoreCaseメソッドで大文字・小文字を区別せずに比較する
文字列を大文字・小文字区別せずに比較するには、equalsIgnoreCaseメソッドを使用しましょう。
Javapublic int equalsIgnoreCase(String str)
equalsIgnoreCase メソッドは、2つの文字列の大文字・小文字の区別をなくした上で辞書的に比較するメソッドです。
一致する場合はtrue、一致しない場合はfalseを返します、
実際に equalsIgnoreCaseメソッドを使用してみましょう。
println(target.equalsIgnoreCase(title))
出力は以下のようになります。
true
大文字・小文字の違いを除けば一致しているので、結果はtrueとなりました。
java.lang.String#equalsIgnoreCase(java.lang.String)文字列を部分的に比較するには regionMatches メソッドを使用する
regionMatches メソッドを使用すると、文字列を部分的に比較することができます。
compareToIgnoreCase メソッドのように、大文字・小文字を区別せずに比較することもできます。
java.lang.String#regionMatches(int, java.lang.String, int, int)文字列を辞書的に比較するには compareTo メソッドを使用する
compareTo メソッドを使用すると、文字列を辞書的にどちらが前か後ろなのかを比較することができます。
また、compareToIgnoreCase メソッドを使用すると、大文字・小文字を区別せずに比較することができます。
これらのメソッドについて、詳しくは以下の記事をご覧ください。
さらに正確に比較するには java.text.Collatorクラスを使用する
上述の各メソッドはロケールを考慮しません。
したがって、特に大文字・小文字を区別しない場合には、特定のロケールで予期せぬ結果が生じることがあります。
より正確な比較を行いたい場合には、Collatorクラスを使用してください。
java.text.CollatorJavaにおける文字列比較には注意が必要
Javaで文字列を単純に比較するには equals を使用する
Javaにおいて文字列を比較する場合には、注意が必要です。
文字列を比較する場合にはcompareToメソッドか、equalsメソッドを使用しましょう。
Javapublic boolean equals(Object anObject)
val title = "Scala逆引き解説 Scalapedia" val target = "scala逆引き解説 SCALAPEDIA"
javaSystem.out.println(title.equals(target));
false
java.lang.String#equals(java.lang.Object)Javaでは文字列の内容の比較のために==を使ってはいけない
文字列の内容を比較するために==を使ってはいけません。
予期せぬ結果が生じます。
以下の例を見てみましょう。
javaSystem.out.println(title == "Scala逆引き解説 Scalapedia");
true
trueが返ってきました。
一見正しく出力されているように見えますが、別の例もみてみましょう。
javaSystem.out.println(title == new String("Scala逆引き解説 Scalapedia"));
false
同じ文字列を比較しているはずなのに、結果が false となってしまいました。
これは、あくまで == がオブジェクトの参照を比較するメソッドであるためです。
第一の例では、両者が同じオブジェクトを参照するようにコンパイラが最適化してくれました。
そのため、あたかも期待通りの結果が返ってきているかのように見える、というわけです。
Javaにおいて文字列を比較する場合は equals メソッドを使用しましょう。