2011-03-08 24 views
83

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

जैसे, बंटवारे "बिल्ली"

+2

http://stackoverflow.com/questions/1521921/splitting-words-into-letters-in-java – birryree

+1

एक त्वरित संदर्भ, "" के रूप में।शामिल हों (["सी", "ए", "टी"]) "बिल्ली" वापस पाने के लिए। – shuva

उत्तर

94
"cat".split("(?!^)") 

यह उत्पादन करेगा

सरणी [ "सी", "एक", "टी"]

+6

कैसे और क्यों? क्या यह किसी रेगेक्स का अर्थ है किसी चरित्र? क्योंकि मेरे दिमाग में, विभाजन के तरीके के साथ, यह केवल वास्तविक पात्रों (,?,!, ^, और) पर विभाजित होना चाहिए। हालांकि, यह काम करता है जैसा कि आप कहते हैं। – TyP

+2

यह वास्तव में एक रेगेक्स-अभिव्यक्ति है, जिसे नकारात्मक दिखने वाला कहा जाता है। यहाँ प्रलेखन चेकआउट: (?! '...') http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#sum – Erwin

+1

@ ईडब्ल्यू-CodeMonkey '' ऋणात्मक दावे के लिए रेगेक्स वाक्यविन्यास है - यह दावा करता है कि इसके अंदर क्या है इसका कोई मिलान नहीं है। और '^' स्ट्रिंग की शुरुआत से मेल खाता है, इसलिए रेगेक्स प्रत्येक स्थिति पर मेल खाता है जो * स्ट्रिंग की शुरुआत नहीं है, और वहां एक विभाजन को सम्मिलित करता है। यह regex स्ट्रिंग के अंत में भी मेल खाता है और इसलिए परिणाम के लिए एक खाली स्ट्रिंग भी जोड़ देगा, सिवाय इसके कि 'String.split' दस्तावेज़ [कहता है] (https://docs.oracle.com/javase/8/docs /api/java/lang/String.html#split-java.lang.String-) "अनुगामी रिक्त स्ट्रिंग जिसके परिणामस्वरूप सरणी में शामिल नहीं हैं।" – Boann

34
String str = "cat"; 
char[] cArray = str.toCharArray(); 
+0

+1 लेकिन ओपी शायद स्ट्रिंग की सरणी चाहता है। –

+3

nitpicking, मूल प्रश्न स्ट्रिंग की एक सरणी, नहीं चार की एक सरणी के लिए पूछता है। हालांकि यहां से स्ट्रिंग की सरणी प्राप्त करना काफी आसान है। – dsolimano

+0

हाँ, मुझे पहले से ही पता है कि वर्णों की सरणी कैसे प्राप्त करें। मैं सिर्फ चार सरणी के माध्यम से पुनरावृत्ति कर सकता हूं और यदि कोई अन्य तरीका नहीं है, तो प्रत्येक से एक स्ट्रिंग बनाएं। – Matt

-1

शायद तुम पाश के लिए एक का उपयोग कर सकते सरणी "सी", "एक", "टी" कि स्ट्रिंग सामग्री के माध्यम से चला जाता है देने के लिए और वर्ण के आधार पर पात्रों को निकालने होगा charAt विधि का उपयोग कर।

उदाहरण के लिए ArrayList<String> के साथ संयुक्त आप व्यक्तिगत पात्रों की अपनी सरणी प्राप्त कर सकते हैं।

+0

शायद आप एक पैर पर खड़े हो सकते हैं और "गॉड सेव द रानी" गा सकते हैं। क्षमा करें, लेकिन यह सही के करीब भी नहीं है। –

4

स्ट्रिंग क्लास की getChars() विधि पर एक नज़र डालें। जो एक खाली पहला परिणाम प्रदान करेंगे:

+1

बहुत जटिल। अन्य उत्तर बहुत सरल समाधान –

81
"cat".toCharArray() 

लेकिन तुम तार

"cat".split("") 

संपादित करें की आवश्यकता है।

+8

"बिल्ली" .split ("") वापसी होगी [, सी, एक, टी], कोई है? आप अपने सरणी में "बिल्ली" .split ("") के रूप में मैट से उम्मीद काम नहीं करता है एक अतिरिक्त चरित्र होगा ... – reef

+3

, तो आप एक अतिरिक्त रिक्त स्ट्रिंग => [, सी, एक, टी] मिल जाएगा। – reef

+5

इस उत्तर अब अगर आप जावा 8. उपयोग कर रहे हैं काम करता है http://stackoverflow.com/a/22718904/1587046 –

-2
for(int i=0;i<str.length();i++) 
{ 
System.out.println(str.charAt(i)); 
} 
+1

बताएं कि यह क्यों काम करेगा। – Phiter

+1

क्या आप वाकई एक स्ट्रिंग को सरणी में विभाजित करने जा रहे हैं? आप बस स्क्रीन पर स्ट्रिंग प्रिंट कर रहे हैं। – TDG

1

की एक सरणी में एक स्ट्रिंग मोड़ का एक कारगर तरीका एक-चरित्र स्ट्रिंग्स यह करना होगा:

String[] res = new String[str.length()]; 
for (int i = 0; i < str.length(); i++) { 
    res[i] = Character.toString(str.charAt(i)); 
} 

हालांकि, यह इस तथ्य का अधिक नहीं लेता है कि charString में वास्तव में यूनिकोड कोड-पॉइंट के आधे हिस्से का प्रतिनिधित्व कर सकता है। (यदि कोड-पॉइंट बीएमपी में नहीं है।) इससे निपटने के लिए आपको कोड पॉइंट्स के माध्यम से पुन: प्रयास करना होगा ... जो अधिक जटिल है।

यह दृष्टिकोण 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प्रतिलिपि गया है।

1

Basic Multilingual Plane परे वर्णों को इनपुट (कुछ CJK अक्षर, नए इमोजी ...) पर उम्मीद कर रहे हैं, तो इस तरह के दृष्टिकोण के रूप में "ab".split("(?!^)") नहीं किया जा सकता है, क्योंकि वे (array ["a", "?", "?", "b"] में परिणाम) इस तरह के पात्रों को तोड़ने और कुछ सुरक्षित इस्तेमाल किया जाएगा:

"ab".codePoints() 
    .mapToObj(cp -> new String(Character.toChars(cp))) 
    .toArray(size -> new String[size]); 
0

अन्य उत्तर संक्षेप में ...

यह सब जावा संस्करणों पर काम करता है:

"cat".split("(?!^)") 

जावा 8 पर और ऊपर यह केवल काम करता है:

"cat".split("") 
संबंधित मुद्दे