2012-10-08 24 views
18

Bir dizgiyi sayı olarak sıralamak, bir dilden diğerine farklı şekilde yapılır. Örneğin, ingilizce rakamlar artan bir sıralamada harflerden önce gelir. Ancak, Almanca'da rakamlar harflerden sonra sıralanır.Java ile dilbilgisi (Almanca)

ben şöyle bir Collator olarak kullanarak dizeleri sıralamak çalıştı:

private Collator collator = Collator.getInstance(Locale.GERMANY); 
collator.compare(str1, str2) 

Ama karşılaştırma yukarıda

harf kuralı sonra hesap basamak dikkate almaz.

herhangi bir Java şöyle ben RuleBasedCollator kullanıyorum şu an için dikkate bu kuralı (basamak mektupta sonra) almayan neden bir fikir var mı:

private final String sortOrder = "< a, A < b, B < c, C < d, D < e, E < f, F < g, G < h, H < i, I < j, J < k, K < l, L < m, M < n, N < o, O < p, P < q, Q < r, R < s, S < t, T < u, U < v, V < w, W < x, X < y, Y < z, Z < 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9"; 

private Collator collator = new RuleBasedCollator(sortOrder); 
+6

o size sıralama düzeninde Sesli harfler ve Sharp-ler (äöüß) sahip olmadığını kasıtlı mı:

Ve varsayılan Rakamsal ilk yerleştirilmiş olduğunu keşfettiler olarak

? Alman bir yazara sahip olmak için önemli olduklarını söyleyebilirim. –

+0

evet, test davası için umlauts ve özel karakterleri ihmal ettim. sadece çok basit tutmak istedim. – Amir

+4

Ayrıca: Diğer karakterlerden sonra rakamları hangi kurallara göre takip ediyorsunuz? Almanca için ve bu sıralama numaralarından en azından bazıları için birkaç farklı harmanlama vardır. –

cevap

13

kontrol edebilirsiniz kaynak kodu/hata ayıklama hiç bir şey değişmez neden görmeyi:

public static synchronized 
Collator getInstance(Locale desiredLocale) 
{ 
    // Snipping some code here 
    String colString = ""; 
    try { 
     ResourceBundle resource = LocaleData.getCollationData(desiredLocale); 

     colString = resource.getString("Rule"); 
    } catch (MissingResourceException e) { 
     // Use default values 
    } 
    try 
    { 
     result = new RuleBasedCollator(CollationRules.DEFAULTRULES + 
             colString, 
             CANONICAL_DECOMPOSITION); 
    } 
// Snipping some more code here 
:

Collator.getInstance(Locale.GERMANY); 

takip eden kısım kodunu Aramalar

Burada, belirli kuralların (zaten sizin durumunuzda boş olan), varsayılan değerlerden (CollationRules.DEFAULTRULES) sonra belirtildiğini görebilirsiniz.

// NUMERICS 

    + "<0<1<2<3<4<5<6<7<8<9" 
    + "<\u00bc<\u00bd<\u00be" // 1/4,1/2,3/4 fractions 

    // NON-IGNORABLES 
    + "<a,A" 
    + "<b,B" 
    + "<c,C" 
    + "<d,D"