तो मुझे String#codePointAt(int)
के बारे में पता है, लेकिन यह char
ऑफसेट द्वारा अनुक्रमित है, कोडपॉइंट ऑफसेट द्वारा नहीं।मैं जावा स्ट्रिंग के यूनिकोड कोडपॉइंट्स के माध्यम से कैसे पुन: प्रयास कर सकता हूं?
मैं की तरह कुछ कोशिश कर के बारे में सोच रहा हूँ:
String#charAt(int)
का उपयोग कर परीक्षण है कि क्याchar
high-surrogates range- यदि ऐसा है तो में है एक सूचकांक
- पर
char
प्राप्त करने के लिए, करने के लिएString#codePointAt(int)
का उपयोग कोडपॉइंट प्राप्त करें, और सूचकांक को 2 - द्वारा बढ़ाएं, यदि दिए गए
char
का उपयोग करें कोडपॉइंट के रूप में मूल्य, और 1
द्वारा सूचकांक को बढ़ा देते लेकिन मेरी चिंताओं
- मुझे यकीन है कि सीमा है कि क्या कोड पॉइंट्स जो उच्च किराए की कोख में स्वाभाविक रूप से कर रहे हैं के रूप में संग्रहीत किया जाएगा नहीं कर रहा हूँ कर रहे हैं दो
char
मूल्य या एक - यह
- के माध्यम से पुनरावृत्त करने के लिए एक भयानक महंगा तरीका लगता है, किसी को कुछ बेहतर तरीके से आना चाहिए।
चाहे यह "महंगा" है या नहीं, ... जावा में कोई अन्य तरीका नहीं बनाया गया है। लेकिन यदि आप केवल लैटिन/यूरोपीय/सिरिलिक/ग्रीक/हिब्रू/अरबी स्क्रिप्ट के साथ काम कर रहे हैं, तो आप बस अपने दिल की सामग्री के लिए s.charAt()। :) –
लेकिन आपको नहीं करना चाहिए। उदाहरण के लिए यदि आपका प्रोग्राम एक्सएमएल आउटपुट करता है और यदि कोई इसे कुछ अस्पष्ट गणितीय ऑपरेटर देता है, तो अचानक आपका एक्सएमएल अमान्य हो सकता है। –
@ जोनाथन फीनबर्ग मैंने यही सोचा। लेकिन यहां आया कि विशेष गणितीय ई। यूटीएफ -16 99% समय काम करता है - लेकिन फिर यह वास्तव में दर्दनाक हो जाता है। विशेष रूप से जब समस्याएं लंबे समय तक छिपी रहती हैं। – Martin