2012-07-30 18 views
33

मैं चाहूँगा पता है कि कैसे छोटे तार या शब्दों की एक श्रृंखला में एक बड़ी स्ट्रिंग को विभाजित करने के। उदाहरण के लिए:अलग-अलग शब्दों में विभाजित करें स्ट्रिंग जावा

मैं अपने कुत्ते को चलने के लिए चाहते हैं।

मैं एक स्ट्रिंग करना चाहते हैं: "I", अन्य स्ट्रिंग: "want", आदि

मैं यह कैसे करना होगा?

+2

कृपया दिखाएं * आपने * क्या * कोशिश की है (क्या आपने स्ट्रिंग के लिए दस्तावेज़ों में "विभाजन" शब्द की तलाश की है, उदाहरण के लिए?) –

+9

हां, स्ट्रिंग # विभाजन() को बहुत अस्पष्ट नाम दिया गया है: -P – maksimov

उत्तर

56

उपयोग split() विधि

उदाहरण के लिए:

String s = "I want to walk my dog"; 

String[] arr = s.split(" ");  

for (String ss : arr) { 

     System.out.println(ss); 
    } 
+0

स्ट्रिंग एस से पहले से ही लिंक से लिंक के माध्यम से जाना है? – fosho

+0

@fosho धन्यवाद ... यह एक टाइपो –

+13

था यह विधि शब्दों से अल्पविराम, बिंदुओं और अन्य चीज़ों को नहीं हटाएगी। – kazy

1

उपयोग split()

String words[] = stringInstance.split(" "); 
+0

क्या आवश्यक होना चाहिए मैं आयात करता हूँ? – fosho

+2

कुछ नहीं

+1

कृपया उत्तर –

2

आप String वर्ग के split(" ") विधि का उपयोग कर सकते हैं और कोड के रूप में नीचे दिए गए प्रत्येक शब्द प्राप्त कर सकते हैं:

String s = "I want to walk my dog"; 
String []strArray=s.split(" "); 
for(int i=0; i<strArray.length;i++) { 
    System.out.println(strArray[i]); 
} 
2

फिर भी एक और विधि, StringTokenizer का उपयोग कर:

String s = "I want to walk my dog"; 
StringTokenizer tokenizer = new StringTokenizer(s); 

while(tokenizer.hasMoreTokens()) { 
    System.out.println(tokenizer.nextToken()); 
} 
+0

आह! यह उस स्थिति में अच्छा है जहां मुझे सरणी की आवश्यकता नहीं है लेकिन टोकनज़र टोकन की सरणी वापस नहीं कर रहा है? अच्छा विचार हालांकि –

+0

नहीं, कोई सरणी नहीं बनाई जा रही है। 'स्ट्रिंगटोकनाइज़र' स्ट्रिंग में लगातार टोकन की तलाश करता है और उन्हें एक-एक करके देता है। – Kao

+0

अच्छा समाधान, दुर्भाग्यवश, स्ट्रिंगटोकनाइज़र का अब और उपयोग नहीं किया जाना चाहिए। डॉक्स से: स्ट्रिंगटोकनाइज़र एक विरासत वर्ग है जो संगतता कारणों के लिए बनाए रखा गया है हालांकि इसका उपयोग नए कोड में निराश है। यह अनुशंसा की जाती है कि इस कार्यक्षमता की तलाश करने वाले किसी भी व्यक्ति को स्ट्रिंग या java.util.regex पैकेज की विभाजन विधि का उपयोग करें। – Tomor

19

एक regex भी शब्द विभाजित करने के लिए इस्तेमाल किया जा सकता। \ W, ([a-zA-z0-9_]) शब्द वर्णों का मिलान करने ताकि विराम चिह्न परिणामों से निकाल दिया जाता है इस्तेमाल किया जा सकता:

String s = "I want to walk my dog, and why not?"; 
Pattern pattern = Pattern.compile("\\w+"); 
Matcher matcher = pattern.matcher(s); 
while (matcher.find()) { 
    System.out.println(matcher.group()); 
} 

आउटपुट:

I 
want 
to 
walk 
my 
dog 
and 
why 
not 

जावा देखें API दस्तावेज़ के लिए Pattern

+0

क्या यह खाली शब्द उत्पन्न करता है? –

35

एक अधिक सामान्य समाधान के रूप में (! लेकिन ASCII केवल), (अल्पविराम और अर्धविराम) की तरह शब्दों के बीच किसी अन्य विभाजक शामिल करने के लिए, मेरा सुझाव है:

String s = "I want to walk my dog, cat, and tarantula; maybe even my tortoise."; 
String[] words = s.split("\\W+"); 

regex मतलब यह है कि सीमांकक कुछ भी है कि एक शब्द [\ W] नहीं है, कम से कम एक [+] के समूह में हो जाएगा। क्योंकि [+] लालची है, उदाहरण के लिए यह ';' ले जाएगा और 'एक साथ एक delimiter के रूप में।

+4

\\ डब्ल्यू केवल एएससीआईआई वर्णमाला वर्णों पर विचार करता है। यह उच्चारण के साथ भाषाओं के लिए उपयुक्त नहीं है। – rghome

+0

इसे इंगित करने के लिए धन्यवाद! तदनुसार बदल दिया जवाब। –

3

मेरी other answer यदि आपका वाक्यांश बल शामिल पात्रों देखें:

String[] listeMots = phrase.split("\\P{L}+"); 
+1

यह सबसे अच्छा जवाब है। – rghome

0

शब्द (सभी छोटे अक्षर और अपर केस अक्षरों को छोड़कर सब कुछ की तरह) के बीच कोई विभाजक सम्मिलित करने के लिए, हम कर सकते हैं:

String mystring = "hi, there,hi Leo"; 
String[] arr = mystring.split("[^a-zA-Z]+"); 
for(int i = 0; i < arr.length; i += 1) 
{ 
    System.out.println(arr[i]); 
} 

यहाँ regex मतलब यह है कि विभाजक कुछ भी है कि एक अपर या लोअर केस पत्र [^a-zA-Z] नहीं है, कम से कम एक [+] के समूह में हो जाएगा।

संबंधित मुद्दे