2012-10-08 2 views
18

के साथ भाषाई सॉर्टिंग (जर्मन) संख्या के साथ एक स्ट्रिंग को सॉर्ट करना एक भाषा से दूसरे भाषा में अलग-अलग किया जाता है। उदाहरण के लिए, अंग्रेजी अंकों में आरोही क्रम में अक्षरों से पहले आते हैं। लेकिन, जर्मन में, अंक अक्षरों के बाद क्रमबद्ध होते हैं।जावा

मैं इस प्रकार एक Collator के रूप में प्रयोग तार सुलझाने के लिए करने की कोशिश की:

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

लेकिन तुलना ऊपर खाते अंकों में पत्र शासन के बाद नहीं ले करता है।

किसी भी एक एक विचार क्यों जावा कुछ समय के लिए खाते में इस नियम (अंक पत्र के बाद) नहीं ले रही है मैं RuleBasedCollator उपयोग कर रहा हूँ के रूप में निम्नानुसार है:

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

यह जानबूझकर है कि आप अपने सॉर्ट क्रम में Umlauts और तीव्र-एस (äöüß) की जरूरत नहीं है है? मैं कहूंगा कि जर्मन कॉललेटर रखने के लिए वे महत्वपूर्ण हैं। –

+0

हां, परीक्षण मामले के लिए मैंने उमोट्स और विशेष पात्रों को छोड़ दिया है। बस इसे बहुत आसान रखना चाहता था। – Amir

+4

इसके अलावा: अन्य नियमों के बाद आप किस प्रकार के नियमों का पालन करते हैं? जर्मन के लिए कई अलग-अलग collations हैं और कम से कम उन प्रकार के कुछ नंबर पहले हैं। –

उत्तर

13

आप देख सकते हैं/डिबग स्रोत कोड देखने के लिए क्यों कोई अन्य परिवर्तन नहीं:

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); 

निम्नलिखित टुकड़ा कोड कॉल

यहां पर आप देख सकते हैं कि विशिष्ट नियम (colString जो आपके मामले में खाली है) डिफ़ॉल्ट (CollationRules.DEFAULTRULES) के बाद रखा गया है।

और तुम ने पाया है कि चूक numerics पहले रखा है के रूप में:

// 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"