8

利用可能なすべての言語のソートされたポーランド語の名前を印刷したかったのです。

import java.util.*;

public class Tmp
{
  public static void main(String... args)
  {
    Locale.setDefault(new Locale("pl","PL"));
    Locale[] locales = Locale.getAvailableLocales();
    ArrayList<String> langs = new ArrayList<String>();
    for(Locale loc: locales) {
      String  lng = loc.getDisplayLanguage();
      if(!lng.trim().equals("") && ! langs.contains(lng)){
        langs.add(lng);
      }
    }
    Collections.sort(langs);
    for(String str: langs){
      System.out.println(str);
    }
  }
}

残念ながら、ソート部分に問題があります。出力は次のとおりです。

:
:
kataloński
koreański
litewski
macedoński
:
:
węgierski
włoski
łotewski

残念ながら、ポーランド語では前後にł来るため、出力は次のようになります。lm

:
:
kataloński
koreański
litewski
łotewski
macedoński
:
:
węgierski
włoski

どうすればそれを達成できますか?言語に依存しない普遍的な方法はありますか (たとえば、これを表示し、別の並べ替え規則を使用して別の言語で並べ替えたいとします)。

4

6 に答える 6

11

試す

Collections.sort(langs, Collator.getInstance(new Locale("pl", "PL")));

それは生成します

...
litewski
łotewski
...

詳細については、Collat​​or API を参照してください

于 2013-03-20T08:33:58.390 に答える
7

Collat​​or を sort メソッドに渡す必要があります。

// sort according to default locale
Collections.sort(langs, Collator.getInstance());

デフォルトの並べ替え順序は、文字列内の Unicode コードポイントによって定義されます。これは、どの言語でも正しいアルファベット順ではありません。

于 2013-03-20T08:30:00.990 に答える
2

をご覧くださいjava.text.Collator.newInstance(Locale)。あなたのケースでは、ポーランド語のロケールを指定する必要があります。Collat​​ors はインターフェイスを実装するComparatorため、並べ替え API や のような並べ替えられたデータ構造で使用できますTreeSet

于 2013-03-20T08:31:10.563 に答える
1

残念ながら、ポーランド語では ł は l の後、m の前に来るため、出力は次のようになります。

独自のCompararableまたはComparatorインターフェイスを定義できます。

または、これも役立つかもしれません:

于 2013-03-20T08:32:32.903 に答える