文字列を辞書的に比較する方法/大文字・小文字を区別せずに比較する方法

Scala 3 (Dotty 0.26.0-RC1) 2.13.3 2.12.12
最終更新:2020年8月1日

[AD] scalapediaでは記事作成ボランティアを募集しています

この記事では、文字列を辞書的に比較する方法について解説します。

一致するかどうか比較する方法についてはこちらの記事をご覧ください。

文字列を辞書的に比較するには < <= >= > を使用する

文字列を辞書的に比較するだけであれば、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メソッドを使用すると、文字列を辞書的に比較することができます。

Java
public int compareTo(String anotherString)

戻り値は以下のようになります。

  • 一致する場合は0を返す
  • 引数の文字列を起点に、この文字列が辞書的に前にある場合は「負の数」を返す
  • 引数の文字列を起点に、この文字列が辞書的に後ろにある場合は「正の数」を返す

この「負の数」「正の数」は文字列の内容次第でさまざまな値をとります。
この値が具体的に表す内容については、 java.lang.String#compareTo(java.lang.String) を参照してください。

println(title.compareTo(target))
-32

compareToIgnoreCaseメソッドで大文字・小文字を区別せずに比較する

文字列を大文字・小文字区別せずに比較するには、compareToIgnoreCaseメソッドを使用しましょう。

Java
public int compareToIgnoreCase(String str)

compareToIgnoreCase メソッドは、2つの文字列の大文字・小文字の区別をなくした上で辞書的に比較するメソッドです。

戻り値の表す内容は compareTo メソッドと同じです。

この値が表す内容については java.lang.String#compareTo(java.lang.String) を参照してください。

実際に compareToIgnoreCaseメソッドを使用してみましょう。

println(target.compareToIgnoreCase(title))

出力は以下のようになります。

0

大文字・小文字の違いを除けば一致しているので、結果は0となりました。

さらに正確に比較するには java.text.Collatorクラスを使用する

上述の各メソッドはロケールを考慮しません。
したがって、特に大文字・小文字を区別しない場合には、特定のロケールで予期せぬ結果が生じることがあります。

より正確な比較を行いたい場合には、Collatorクラスを使用してください。

Java 11 API Docs:java.text.Collator

サイト内検索


カテゴリ「文字列処理」の記事

文字列をエスケープしたり復元したりする方法(Apache Commons Text) JavaとScalaのString/StringBuilder/StringBuffer使い分け事情 文字列を分割する方法(split・splitAt・linesIterator・linesWithSeparatorsメソッド) trimメソッドで文字列の前後の空白を除去する 文字列が一致するか比較する方法/大文字・小文字を区別せずに比較する方法 特定の文字の文字コード(コード・ポイント)を取得する replaceメソッドなど、文字列を置換する方法を紹介 文字列の先頭や末尾を、取得したり切り落としたりする方法 containsメソッドでStringに特定の文字列が含まれるか調べる方法 数値を文字列に変換する方法 stripメソッドで文字列の前後の全角空白を除去する 文字列を数値に変換するには?to○○メソッドと注意点について 文字列を辞書的に比較する方法/大文字・小文字を区別せずに比較する方法 文字列が特定の文字列で始まるか・終わるかを調べる方法 【getBytes&size】文字列のバイト長を取得する方法 substringでStringを切り取り、部分文字列を抽出する方法 StringOpsとWrappedStringの違いは? 文字列を連結するには?+演算子やString interpolationの使い方 文字列の大文字へ・小文字へ変換する方法 文字列を逆順にする方法 文字列の文字コード(文字セット)を変換する方法 文字列の長さを取得する方法:lengthとcodePointCountの使い分け 文字列をURLエンコード・デコードする方法 文字列が正規表現に合致するか調べる方法 この文字の位置はどこ?文字列のインデックスを取得する方法 文字列をバイト列に、またはバイト列を文字列に変換する方法

カテゴリ「文字列処理」の記事

文字列をエスケープしたり復元したりする方法(Apache Commons Text) JavaとScalaのString/StringBuilder/StringBuffer使い分け事情 文字列を分割する方法(split・splitAt・linesIterator・linesWithSeparatorsメソッド) trimメソッドで文字列の前後の空白を除去する 文字列が一致するか比較する方法/大文字・小文字を区別せずに比較する方法 特定の文字の文字コード(コード・ポイント)を取得する replaceメソッドなど、文字列を置換する方法を紹介 文字列の先頭や末尾を、取得したり切り落としたりする方法 containsメソッドでStringに特定の文字列が含まれるか調べる方法 数値を文字列に変換する方法 stripメソッドで文字列の前後の全角空白を除去する 文字列を数値に変換するには?to○○メソッドと注意点について 文字列を辞書的に比較する方法/大文字・小文字を区別せずに比較する方法 文字列が特定の文字列で始まるか・終わるかを調べる方法 【getBytes&size】文字列のバイト長を取得する方法 substringでStringを切り取り、部分文字列を抽出する方法 StringOpsとWrappedStringの違いは? 文字列を連結するには?+演算子やString interpolationの使い方 文字列の大文字へ・小文字へ変換する方法 文字列を逆順にする方法 文字列の文字コード(文字セット)を変換する方法 文字列の長さを取得する方法:lengthとcodePointCountの使い分け 文字列をURLエンコード・デコードする方法 文字列が正規表現に合致するか調べる方法 この文字の位置はどこ?文字列のインデックスを取得する方法 文字列をバイト列に、またはバイト列を文字列に変換する方法