मुझे स्ट्रिंग को एकल वर्ण स्ट्रिंग्स की एक सरणी में विभाजित करने की आवश्यकता है।
उदाहरण के लिए, "बिल्ली" को विभाजित करने से सरणी "c", "a", "t" होगी
.split("")
देगा।
मुझे स्ट्रिंग को एकल वर्ण स्ट्रिंग्स की एक सरणी में विभाजित करने की आवश्यकता है।
उदाहरण के लिए, "बिल्ली" को विभाजित करने से सरणी "c", "a", "t" होगी
.split("")
देगा।
जवाबों:
"cat".split("(?!^)")
इससे उत्पादन होगा
सरणी ["c", "a", "t"]
(?!
... )
एक नकारात्मक अभिकथन के लिए regex सिंटैक्स है - यह दावा करता है कि इसके अंदर क्या है, इसका कोई मेल नहीं है। और ^
स्ट्रिंग की शुरुआत से मेल खाता है, इसलिए रेगेक्स हर स्थिति में मेल खाता है जो स्ट्रिंग की शुरुआत नहीं है, और वहां एक विभाजन सम्मिलित करता है। यह रेगेक्स स्ट्रिंग के अंत में भी मेल खाता है और इसलिए परिणाम के लिए एक रिक्त स्ट्रिंग भी जोड़ देगा, सिवाय इसके कि String.split
दस्तावेज़ीकरण कहता है कि "खाली स्ट्रिंग को अनुरेखण परिणामी सरणी में शामिल नहीं किया गया है"।
String.split
से थोड़ा तो बदल गया था कि प्रमुख खाली एक शून्य चौड़ाई मैच भी परिणाम सरणी में शामिल नहीं हैं द्वारा उत्पादित तार, इसलिए (?!^)
दावे स्थिति स्ट्रिंग की शुरुआत नहीं है कि हो जाता है अनावश्यक, करने के लिए regex की इजाजत दी कुछ भी सरलीकृत न करें "cat".split("")
- लेकिन जावा 7 और उससे नीचे के परिणाम सरणी में एक अग्रणी खाली स्ट्रिंग पैदा करता है।
"cat".toCharArray()
लेकिन अगर आपको स्ट्रिंग्स की आवश्यकता है
"cat".split("")
संपादित करें: जो पहले खाली मान लौटाएगा।
.toCharArray()
वैसे भी उपयोग करना चाहिए ; यह regex से बचा जाता है और आदिमों की एक सरणी लौटाता है char
ताकि यह तेज़ और हल्का हो। 1-वर्ण स्ट्रिंग्स की एक सरणी की आवश्यकता है ।
String str = "cat";
char[] cArray = str.toCharArray();
cArray
वापस कैसे परिवर्तित करेंगे String
?
यदि मूल बहुभाषी विमान से परे वर्ण इनपुट पर अपेक्षित हैं (कुछ CJK वर्ण, नए इमोजी ...), जैसे कि "a💫b".split("(?!^)")
उपयोग नहीं किया जा सकता है, क्योंकि वे ऐसे वर्णों को तोड़ते हैं (परिणाम में array ["a", "?", "?", "b"]
) और कुछ सुरक्षित उपयोग किया जाना है:
"a💫b".codePoints()
.mapToObj(cp -> new String(Character.toChars(cp)))
.toArray(size -> new String[size]);
स्ट्रिंग को एक-वर्ण स्ट्रिंग्स के एक सरणी में बदलने का एक कुशल तरीका यह होगा:
String[] res = new String[str.length()];
for (int i = 0; i < str.length(); i++) {
res[i] = Character.toString(str.charAt(i));
}
हालांकि, इस तथ्य यह है कि एक के खाते में नहीं ले करता है char
एक में String
वास्तव में एक यूनिकोड कोड सूत्री के आधे का प्रतिनिधित्व कर सकते हैं। (यदि कोड-बिंदु बीएमपी में नहीं है।) इससे निपटने के लिए आपको कोड बिंदुओं के माध्यम से पुनरावृति करने की आवश्यकता है ... जो अधिक जटिल है।
यह दृष्टिकोण उपयोग करने की तुलना में तेज़ होगा String.split(/* clever regex*/)
, और यह संभवतः जावा 8+ स्ट्रीम का उपयोग करने की तुलना में तेज़ होगा। यह इस से अधिक तेजी से संभावित है:
String[] res = new String[str.length()];
int 0 = 0;
for (char ch: str.toCharArray[]) {
res[i++] = Character.toString(ch);
}
क्योंकि toCharArray
के लिए है नकल एक नई सरणी के लिए वर्ण।
हो सकता है कि आप एक लूप के लिए उपयोग कर सकते हैं जो स्ट्रिंग सामग्री के माध्यम से जाता है और charAt
विधि का उपयोग करके वर्णों को निकालता है।
एक ArrayList<String>
उदाहरण के साथ संयुक्त आप अपने चरित्र के सरणी प्राप्त कर सकते हैं।
यदि मूल स्ट्रिंग में अनुपूरक यूनिकोड वर्ण हैं , तो split()
यह काम नहीं करेगा, क्योंकि यह इन पात्रों को सरोगेट जोड़े में विभाजित करता है। इन विशेष वर्णों को सही ढंग से संभालने के लिए, इस तरह का एक कोड काम करता है:
String[] chars = new String[stringToSplit.codePointCount(0, stringToSplit.length())];
for (int i = 0, j = 0; i < stringToSplit.length(); j++) {
int cp = stringToSplit.codePointAt(i);
char c[] = Character.toChars(cp);
chars[j] = new String(c);
i += Character.charCount(cp);
}
स्प्रेड ऑपरेटर [ ...
] स्ट्रिंग में प्रत्येक चार के साथ एक सरणी बनाता है:
const cat= 'cat';
const arrayized = [...cat] // ['c', 'a', 't'];
console.log(arrayized);