यह आमतौर पर कोड अंक जो IntStream
है की धारा का उपयोग करने के लिए और अधिक सुरक्षित है:
IntStream codePoints = string.codePoints();
इस तरह यूनिकोड सरोगेट जोड़े, एकल कोडपॉइंट में विलय कर दिया जाएगा ताकि आप किसी भी यूनिकोड प्रतीकों के साथ सही परिणाम होगा । उदाहरण उपयोग:
String result = string.codePoints().map(Character::toUpperCase)
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
भी ध्यान रखें कि आप मुक्केबाजी से बचने, इस प्रकार यह प्रसंस्करण Stream<Character>
से भी अधिक प्रभावी हो सकता है।
StringBuilder sb = new StringBuilder();
String result = string.codePoints().map(Character::toUpperCase)
.forEachOrdered(sb::appendCodePoint);
जबकि इस तरह के दृष्टिकोण कम कार्यात्मक लग रहा है, यह अगर आप पहले से ही एक StringBuilder
है या करने के लिए बाद में कुछ और जोड़ करना चाहते हैं और अधिक कुशल हो सकता है:
एक और तरीका है इस तरह के धारा इकट्ठा करने के लिए StringBuilder
अलग उपयोग करने के लिए है एक ही स्ट्रिंग
स्रोत
2015-09-09 06:56:40
ध्यान दें कि यह समाधान काम नहीं करता है यदि स्ट्रिंग में यूनिकोड वर्ण होता है जो जावा चार में फिट नहीं होता है। यह मामला है, उदाहरण के लिए, कुछ आर्केन भाषाओं के साथ ही इमोटिकॉन्स के साथ। [टैगर का उत्तर] (https://stackoverflow.com/a/32472793/452775) उन समाधानों के लिए देखें जो इसे संभालते हैं। – Lii