2012-07-03 22 views
8

उदाहरण के लिए -मुझे कैसे पता चलेगा कि मेरे स्ट्रिंग में डाइक्रिटिक्स हैं?

text = Československá obchodní banka; 

text string contains diacritics like Č , á etc. 

मैं एक समारोह जहां मैं इस स्ट्रिंग "Československá obchodní बांका" और function will return true if string contains diacritics else false पारित करेंगे लिखना चाहते हैं।

मुझे डायक्रिटिक्स और स्ट्रिंग को संभालना है जिसमें चरित्र शामिल है जो अलग-अलग ए-जेड या ए-जेड श्रेणी में नहीं आता है।

1) If String contains diacritics then I have to do some XXXXXX on it. 

2) If String contains character other than A-Z or a-z and not contains diacritics then do some other operations YYYYY. 

मुझे नहीं पता कि यह कैसे करना है।

+0

उपयोग मामला है क्या:

आप इस प्रकार, java.text.Normalizer उपयोग कर सकते हैं? "Diacritics" से आप वास्तव में मतलब है कि आप अक्षरों वाले अक्षरों को देखना चाहते हैं, या आपका मतलब है * कोई पत्र * जो ए-जेड श्रेणी में नहीं है? 'じ' जैसे गैर-लैटिन अक्षरों के बारे में क्या आप तर्क दे सकते हैं कि जापानी समकक्षों के बराबर हैं? – deceze

+0

क्यों स्ट्रिंग में प्रत्येक वर्ण की जांच न करें और इसे int में पार्स करें, 127 से अधिक कुछ भी एक विशिष्ट है –

+1

@ डेविड यह थोड़ा सा सरल है और वास्तव में मैं पूछ रहा था कि मैं ऊपर क्या पूछ रहा था। मुझे पता नहीं था कि "μ" में डाइक्रिटिक्स शामिल हैं। – deceze

उत्तर

11

ज्ञान का एक टुकड़ा: यूनिकोड में á के लिए एक कोड मौजूद है लेकिन एक ही परिणाम a और combining mark-' के साथ हो सकता है।

public static boolean hasDiacritics(String s) { 
    // Decompose any á into a and combining-'. 
    String s2 = Normalizer.normalize(s, Normalizer.Form.NFD); 
    return s2.matches("(?s).*\\p{InCombiningDiacriticalMarks}.*"); 
    //return !s2.equals(s); 
} 
+0

मैंने अपना जवाब सही किया: यदि मूल एस में पहले से ही एक विघटित है, तो एक बराबर परीक्षण सफल नहीं होगा। –

4

Normalizer कक्षा इसे पूरा करने में सक्षम प्रतीत होती है। कुछ सीमित परीक्षण इंगित करते हैं कि

Normalizer.isNormalized(text, Normalizer.Form.NFD) 

आपको जो चाहिए वह हो सकता है।

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