2010-11-19 18 views
6

Burada yerel alfabe emirdir: wikipedia İşte
benim kod:Harmanlama verilen Yerel Ayar sıralama doğru değil

public static void main(String[] args) { 
    Locale loc = new Locale("sr","RS"); 

    Collator col = Collator.getInstance(loc); 
    col.setStrength(Collator.SECONDARY); 

    List<String> slova = new ArrayList<String>(); 

    slova.add("Austrija"); 
    slova.add("Slovačka"); 
    slova.add("Č"); 
    slova.add("Đ"); 
    slova.add("C"); 
    slova.add("Grčka"); 
    slova.add("Slovenija"); 
    slova.add("Španija"); 
    slova.add("Švajcarska"); 
    slova.add("Švedska"); 
    slova.add("Srbija"); 

    Collections.sort(slova,col); 

    for(String s: slova) 
     System.out.println(s); 
} 

Ve burada çıkış var:

Austrija
C
È
Grčka
Slovačka
Slovenija
Španija
Srbija
Švajcarska
Švedska
©

bu doğru sipariş değil Yukarıdaki bağlantıdan görebileceğiniz gibi.
Neyi yanlış yapıyorum?

+0

ile başlayan kelimeler S ve Š ile başlayan kelimeler karıştırılır ve sonuçta bitmesi beklenmez. – cbaby

+0

Herkesin çıktıyı yanlış görebildiğini varsayarsak güçlü abartılı. –

+1

Bu yüzden üstte alfabe düzeni ile bağlantı ekledim ve çıktıyla ilgili neyin yanlış olduğunu belirten bir açıklama ekledim. – cbaby

cevap

-1

Sadece politik ve dilsel durumların neden olduğu bilinen bir sorun olduğunu öğrendiniz. Yardım için teşekkürler.

+2

Bundan emin değilim. Sıralama kuralları, çeşitli Unicode Standard sürümleri (unicode.org) tarafından yakalanır. Geçerli standart sürüm (6.0), Sırbistan için doğru sıralama kurallarına sahip olabilir, ancak Java önceki bir anlık görüntüyü uygular. Lütfen ICU'nun uygulamasına bir göz atın: http://icu-project.org/apiref/icu4j/com/ibm/icu/text/Collator.html ve doğru yolu sıralayıp ayırmadığına bakın. –

1

Sorun senin wikipedia sayfasında bulunan ve onun ISO linki @Vash olarak hiçbir ülke kodu RS

+1

http://www.iso.org/iso/english_country_names_and_code_elements ve Collator'da getAvailableLocales() öğesini çağırdığımda diğerleri arasında sr_RS alır. – cbaby

3

ile ISO-3166 orada olduğunu olabileceğini düşünüyorum. Sırbistan "sr" ile kastettin mi? O zaman ülke olarak "cs" yi seçmelisin.

Düzenleme: kullandığınız java sürümüne bağlıdır. Java 6, yeni iso standardını kullanır.

+0

Vash'ın bağlantı noktası, eski ISO kodlarına işaret ediyor. Desteklenen yerel ayarları kontrol ettim ve Collator, sr_RS'yi ve eski sr_CS'yi destekliyor. Sr_CS kullanarak aynı çıkışı verir. – cbaby

+0

ISO-3166, tanımı ile güncel olamaz. Bağlantı Java dokümantasyonundan. –

0

İstediğiniz sıralama düzeni mevcut değilse, kendi siparişinizi RuleBasedCollator ile oluşturabilirsiniz. Bu sınıfın belgelerinden korkmayın. Bu,

String rules = "< a < b < c < ç < d ..."; 
RuleBasedCollator myRuleBased = new RuleBasedCollator(rules); 
Collections.sort(myList, myRuleBased); 
+0

Sorunumu tam olarak çözmüyorum, çünkü dinamik olarak elde edilen çok sayıda Locale'e göre sıralama yapmam gerekiyor, bu da 40'ın üzerinde farklı dili kapsayacak bir kural tanımlamak zorunda olduğum anlamına geliyor. Böyle bir canavarı yazmaya istekli olsam bile, onu korumak için daha kötü bir kabus olurdu. Benzer Locale ile 'sr' değiştirmeyi tercih ettim. – cbaby

İlgili konular