2010-10-27 10 views
15

के बाहर जावा रेगेक्स मैच वर्ण जावा में यूनिकोड बेसिक बहुभाषी विमान के बाहर से मैं पात्रों (उन्हें हटाने के इरादे से) कैसे मिलान कर सकता हूं?मूल बहुभाषी विमान

उत्तर

19

सभी गैर-बीएमपी वर्ण निकालने के लिए, निम्न कार्य करना चाहिए:

String sanitizedString = inputString.replaceAll("[^\u0000-\uFFFF]", ""); 
+0

क्या आपने वास्तव में इसका परीक्षण किया है? चूंकि आपके चरित्र श्रेणी में गैर-बीएमपी कोडपॉइंट्स बनाने के लिए उपयोग की जाने वाली सरोगेट रेंज शामिल है। – Anon

+2

@Anon: जैसा कि आपने अपने उत्तर में बताया है, कोडपॉइंट्स के स्तर पर रेगेक्सप्स का मूल्यांकन किया जाता है, कोड कोड नहीं, इसलिए यह सरोगेट्स नहीं देखता है। – axtavt

+0

हां, यह गैर-बीएमपी पात्रों के साथ परीक्षण किया गया है। –

3

क्या आप बीएमपी के बाहर विशिष्ट पात्रों या सभी पात्रों की तलाश में हैं?

पूर्व, तो आप एक स्ट्रिंग अधिक विमानों से कोड अंक युक्त निर्माण करने के लिए एक StringBuilder उपयोग कर सकते हैं, और regex अपेक्षा के अनुरूप काम करेगा:

String test = new StringBuilder().append("test").appendCodePoint(0x10300).append("test").toString(); 
    Pattern regex = Pattern.compile(new StringBuilder().appendCodePoint(0x10300).toString()); 

    Matcher matcher = regex.matcher(test); 
    matcher.find(); 
    System.out.println(matcher.start()); 

आप निकालना सभी गैर देख रहे हैं एक स्ट्रिंग से -BMP वर्ण, तो मैं regex से StringBuilder प्रयोग करेंगे सीधे नहीं बल्कि:

StringBuilder sb = new StringBuilder(test.length()); 
    for (int ii = 0 ; ii < test.length() ;) 
    { 
    int codePoint = test.codePointAt(ii); 
    if (codePoint > 0xFFFF) 
    { 
     ii += Character.charCount(codePoint); 
    } 
    else 
    { 
     sb.appendCodePoint(codePoint); 
     ii++; 
    } 
    } 
संबंधित मुद्दे