1. ホーム
  2. java

[解決済み] 数字を含む文字列のソート

2023-05-17 10:29:18

質問

文字列を比較するJavaのComparatorクラスを書く必要がありますが、1つ工夫があります。 比較する2つの文字列が、文字列の最初と最後が同じで、異なる中間部分が整数である場合、それらの整数の数値に基づいて比較します。 例えば、以下のような文字列を表示順に終了させたい。

  • aaa
  • bbb 3 ccc
  • bbb 12 ccc
  • ccc 11
  • ddd
  • eee 3 ddd jpeg2000 eee
  • EEE 12 DDD Jpeg2000 EEE

見ての通り、文字列の中には他の整数があるかもしれないので、正規表現を使って任意の整数を除外するわけにはいきません。 文字列の先頭からマッチしないビットを見つけるまで歩き、次に末尾からマッチしないビットを見つけるまで歩き、途中のビットを正規表現 "[0-9]+" と比較し、比較できたら数値比較、それ以外は語彙比較にしようと考えているのです。

もっと良い方法はないでしょうか?

アップデート 文字列中の他の数字、つまり一致する可能性のある数字の周りにスペースがないこと、あるいは異なる数字にスペースがあることを保証することはできないと思うのですが、どうでしょうか?

どのように解決するのですか?

アルファーナムアルゴリズム

ウェブサイトより

"人は、ソフトウェアとは異なる方法で数字を含む文字列をソートします。ほとんどのソート アルゴリズムは ASCII 値を比較しますが、これは人間の論理と矛盾する順序を生成します。それを修正する方法を紹介します。"

編集:以下は Javaコンパレータの実装 へのリンクです。