[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください
この記事では、文字列を辞書的に比較する方法について解説します。
一致するかどうか比較する方法についてはこちらの記事をご覧ください。
文字列を辞書的に比較するには <
<=
>=
>
を使用する
文字列を辞書的に比較するだけであれば、Scalaでは <
, <=
, >=
, >
演算子を使用すればOKです。
「辞書的」というのは、Unicodeコード・ポイントの観点です。
サンプルとして二つ文字列を用意しました。
val title = "Scala逆引き解説 Scalapedia" val target = "scala逆引き解説 SCALAPEDIA"
println(target < title) println(target <= title) println(target >= title) println(target > title)
出力は以下のようになります。
false false true true
辞書的には小文字の方が先なので、小文字が先頭の title
の方が大文字が先頭の target
よりも小さいと記述している式が true
を返しています。
compareTo
を使用して文字列を辞書的に比較する
compareTo
メソッドを使用すると、文字列を辞書的に比較することができます。
Javapublic int compareTo(String anotherString)
戻り値は以下のようになります。
- 一致する場合は
0
を返す - 引数の文字列を起点に、この文字列が辞書的に前にある場合は「負の数」を返す
- 引数の文字列を起点に、この文字列が辞書的に後ろにある場合は「正の数」を返す
この「負の数」「正の数」は文字列の内容次第でさまざまな値をとります。
この値が具体的に表す内容については、 java.lang.String#compareTo(java.lang.String)
を参照してください。
println(title.compareTo(target))
-32
java.lang.String#compareTo(java.lang.String)
compareToIgnoreCase
メソッドで大文字・小文字を区別せずに比較する
文字列を大文字・小文字区別せずに比較するには、compareToIgnoreCase
メソッドを使用しましょう。
Javapublic int compareToIgnoreCase(String str)
compareToIgnoreCase
メソッドは、2つの文字列の大文字・小文字の区別をなくした上で辞書的に比較するメソッドです。
戻り値の表す内容は compareTo
メソッドと同じです。
この値が表す内容については java.lang.String#compareTo(java.lang.String)
を参照してください。
実際に compareToIgnoreCase
メソッドを使用してみましょう。
println(target.compareToIgnoreCase(title))
出力は以下のようになります。
0
大文字・小文字の違いを除けば一致しているので、結果は0
となりました。
java.lang.String#compareToIgnoreCase(java.lang.String)
さらに正確に比較するには java.text.Collator
クラスを使用する
上述の各メソッドはロケールを考慮しません。
したがって、特に大文字・小文字を区別しない場合には、特定のロケールで予期せぬ結果が生じることがあります。
より正確な比較を行いたい場合には、Collatorクラスを使用してください。
java.text.Collator