5

最初の文字で並べ替えたいユニコード文字列のリストがあります。問題は、java.text.Collat​​or を設定して、類似の文字を別のものとして扱うことを知らないことです。

これは私が今得るものです:

  • ロキシュキス
  • シャキアイ
  • サランタイ
  • シェドゥバ
  • シャウレイ
  • シラレ
  • スクオダス
  • タウラゲ
  • テルシャイ

これは私が取得したいものです(Šで始まる単語は、2番目の文字を見ていないSの後に常に行く必要があります):

  • ロキシュキス
  • サランタイ
  • スクオダス
  • シャキアイ
  • シェドゥバ
  • シャウレイ
  • シラレ
  • タウラゲ
  • テルシャイ
4

2 に答える 2

1

クラスを作成して Collat​​or を拡張し、そこで比較メソッドをオーバーライドできます。

例はここにあります。

public class MyCollat​​or extends Collat​​or {

@Override
public int compare(String source, String target) {
    return source.compareTo(target);
}

@Override
public CollationKey getCollationKey(String source) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public int hashCode() {
    // TODO Auto-generated method stub
    return 0;
}

}

次に、この新しく追加されたクラスを使用して String リストをソートすると、正しい方法で表示されます。

Collat​​or collat​​or = new MyCollat​​or();

Collections.sort(リスト、コレーター);

私のテスト結果は次のとおりです。

  • ロキシュキス
  • サランタイ
  • スクオダス
  • タウラゲ
  • テルシャイ
  • シャキアイ
  • シェドゥヴァ
  • シャウレイ
  • シラレ

結果では、 ŠがTの後に表示されていることに注意してください。これは、"Š".compareTo("T")>1が true に等しいためです。

Sの直後にTの前にŠを表示するために、compare メソッドにロジックを入れることができると思います 。

上記のコードは、JDK 1.5 バージョンを使用してコンパイルおよび実行されます。

Collections.sort(list)を直接使用します。上記と同じ結果が得られます。

于 2013-10-28T10:00:27.023 に答える
0

そのため、Collat​​ors の強度と分解のすべてのバリアントをテストしましたが、何も変わりませんでした。私のロケール ("lt_LT") で指定されたそのような並べ替えは、実際には文法的に正しいことがわかりました。

于 2013-11-07T08:20:14.483 に答える