2012-02-21 13 views
7

क्या एंड्रॉइड में अंतरराष्ट्रीय तारों को सही तरीके से सॉर्ट करने का कोई तरीका है? मैं एक कस्टम तुलनित्र, और compareTo() विधि का उपयोग करता हूं, लेकिन यह मेरे लिए पर्याप्त नहीं है। मुझे इस "ö" जैसे अक्षरों को "ओ" के पास प्रदर्शित करना है, लेकिन वे सभी सूची के अंत में हैं। मैं तुलनित्र को यह सोचने के लिए मजबूर कैसे कर सकता हूं कि वे "ओ, ए, आदि ..." के समान हैं?एंड्रॉइड विशेष अक्षरों की तुलना

उत्तर

15

लोकेल-संवेदनशील स्ट्रिंग comaprision उपयोग करने के लिए Collator का उपयोग करें। दस्तावेज़ों से:

लोकेल-संवेदनशील स्ट्रिंग तुलना निष्पादित करता है। एक ठोस उपclass, नियम आधारित कॉलरेटर, नियम सेट के उपयोग द्वारा कोलेशन ऑर्डरिंग के अनुकूलन की अनुमति देता है।

की तुलना तार का उदाहरण:

Collator deCollator = Collator.getInstance(Locale.GERMANY); // or new Locale("pl", "PL") for polish locale ;) 
System.out.println(deCollator.compare("abcö", "abco")); 

प्रिंट 1


आप क्रमबद्ध कोलेटर ऊपर का उपयोग कर तार की सूची चाहते हैं, आप लिख सकते हैं:

final List<String> strings = Arrays.asList(
     "über", "zahlen", "können", "kreativ", "Äther", "Österreich"); 
Collections.sort(strings, deCollator); // Collator implements Comparator 
System.out.println(strings); 

प्रिंट:

[Äther, können, kreativ, Österreich, über, zahlen] 

संपादित करें: बस देखा है कि तुम पॉलिश कर रहे हैं , इसलिए नीचे पोलिश उदाहरण:

final List<String> strings = Arrays.asList(
     "pięć", "piec", "Pieczka", "pięść", "pieczęć", "pieczątka"); 
Collections.sort(strings, Collator.getInstance(new Locale("pl", "PL"))); 
System.out.println(strings); 
// output: [piec, pieczątka, pieczęć, Pieczka, pięć, pięść] 
+0

आपके महान उत्तर के लिए धन्यवाद! ;) असल में, मुझे भी सरल समाधान मिला: 'कोलेटर कॉललेटर = Collator.getInstance(); collator.setDecomposition (Collator.CANONICAL_DECOMPOSITION); collator.compare (एक, दो) 'दूसरा उदाहरण यहां दिखाता है कि' CANONICAL_DECOMPOSITION 'नियम क्या करता है: http://developer.android.com/reference/java/text/Collator.html – lomza

+1

सावधान रहें,' Collator.getInstance () 'बिना स्पष्ट' लोकेल' पर्यावरण-निर्भर है: यह _ एक कोलेटर उदाहरण देता है जो ** उपयोगकर्ता के डिफ़ॉल्ट लोकेल ** के लिए उपयुक्त है। देखें "[डिफ़ॉल्ट लोकेल से सावधान रहें] (http://developer.android.com/reference/java/util/Locale.html#default_locale)" ._ – Xaerxess

+0

चेतावनी के लिए धन्यवाद, लेकिन अब मुझे संदेह है। मुझे केवल उपयोगकर्ता को प्रदर्शित करने के लिए सॉर्ट किए गए डेटा की आवश्यकता है, इसे कहीं कहीं नहीं भेजना या कुछ गणना करना ... तो शायद डिफ़ॉल्ट लोकेल पर्याप्त है? लेकिन अगर मैं जर्मन और डैनिश अक्षरों को सही ढंग से सॉर्ट करना चाहता हूं और उन्हें मशीन आउटपुट के रूप में उपयोग करना चाहता हूं, तो सबसे अच्छा विकल्प 'लोकल.यूएस' लोकेल का उपयोग करना होगा? – lomza

संबंधित मुद्दे