2012-03-26 19 views
26

IST String.split ("(") यह केवल पहला पाया स्ट्रिंग द्वारा विभाजित करने के लिए है कि समारोह में बताने के लिए संभव है "("स्प्लिट पहले से जावा में स्ट्रिंग पाया

उदाहरण:?

String test = "A*B(A+B)+A*(A+B)"; 
test.split("(") should result to ["A*B" ,"A+B)+A*(A+B)"] 
test.split(")") should result to ["A*B(A+B" ,"+A*(A+B)"] 

उत्तर

48

हाँ, बिल्कुल:

test.split("\\(", 2); 

the documentation for String.split(String,int) के रूप में बताते हैं:

limit पैरामीटर पैटर्न लागू होने की संख्या को नियंत्रित करता है और इसलिए परिणामी सरणी की लंबाई को प्रभावित करता है। अगर सीमा n शून्य तो पैटर्न सबसे n पर लागू किया जाएगा से अधिक है - 1 बार, सरणी के लंबाई से अधिक नहीं n हो जाएगा, और सरणी के अंतिम प्रविष्टि परे सभी इनपुट में शामिल होंगे अंतिम मिलान डेलीमीटर। , बच ब्रैकेट प्रति @ नीचे पेड्रो की टिप्पणी के रूप में:

+0

ruakh मैं अपने जवाब की कोशिश की, जब मेरे reges "है \\ (", यह ठीक काम करता है लेकिन जब मेरा रेगेक्स होता है" (", यह अपवाद फेंकता है। क्या आप कह सकते हैं क्यों? –

+3

@ चंद्रशेखर: ऐसा इसलिए है क्योंकि '(जावा नियमित अभिव्यक्तियों में एक विशेष अर्थ है। (उदाहरण के लिए,' (34) + 'का अर्थ है" '34' 'की एक या अधिक घटनाएं, जिसका अर्थ' 34 +' है जिसका अर्थ है "एक' 3', उसके बाद एक या अधिक '4' की घटनाएं।) तो बैकस्लैश का उपयोग" उद्धरण "या" भागने "के लिए किया जाता है, और इसका उपयोग करने के बजाए" वास्तविक "(' वर्ण '' को इंगित करने के बजाय '('विशेष'। – ruakh

+0

@ruakh आपके उत्तर के लिए धन्यवाद। –

4
test.split("\\(",2); 

अधिक जानकारी के लिए javadoc देखें

संपादित। इस समाधान के साथ

+0

अपवाद का कारण बन जाएगा। java.util.regex.PatternSyntaxException: इंडेक्स 1 –

2

प्रयास करें, यह सामान्य तेजी से और रेगुलर एक्सप्रेशन के उपयोग की तुलना में आसान है:

public static String[] splitOnFirst(String str, char c) { 
    int idx = str.indexOf(c); 
    String head = str.substring(0, idx); 
    String tail = str.substring(idx + 1); 
    return new String[] { head, tail} ; 
} 

टेस्ट इस तरह यह:

String test = "A*B(A+B)+A*(A+B)"; 
System.out.println(Arrays.toString(splitOnFirst(test, '('))); 
System.out.println(Arrays.toString(splitOnFirst(test, ')'))); 
+2

"सरल" के पास खुला समूह? मेरा अंदाज़ा है कि हरेक को उसका अपना। मुझे रेगेक्स सबसे सरल और बहुत तेज़ लगता है। साथ ही, यह तारों का समर्थन करता है, और अगर यह str.indexOf (c) == -1' है तो यह उड़ा नहीं जाएगा। – ruakh

+1

यह आसान है क्योंकि आपको इसका उपयोग करने के लिए नियमित अभिव्यक्तियों के बारे में पता नहीं होना चाहिए। निश्चित रूप से, इसे कुछ त्रुटि जांच की आवश्यकता है, लेकिन यह सवाल से परे है। और यदि तारों की आवश्यकता है, तो पैरामीटर 'char c' को' स्ट्रिंग सी 'में बदलकर चाल चल जाएगी। और हां, यह तेज़ है, आपके समाधान को हर बार जब इसे लागू किया जाता है तो संकलन और नियमित अभिव्यक्ति से मिलान करने की आवश्यकता होती है, और ओपी को विशेष पात्रों से बचने की आवश्यकता होगी, जिसे वह अनजान है। –

+0

पुन: "और हाँ, यह तेज़ है": ठीक है, जाहिर है। मैंने यह नहीं कहा कि रेगेक्स तेज है, केवल इतना है कि यह बहुत तेज है, और बहुत आसान है। पुन: "बस 'स्ट्रिंग सी' में पैरामीटर 'char c' को बदलना चाल करेगा": आपको '1' को' c.length()' में बदलना होगा। – ruakh