2013-03-05 6 views
19

मैं एक विभाजन समान निम्नलिखित प्रदर्शन करने के लिए कोशिश कर रहा हूँ:ग्रूवी/जावा विभाजित कोष्ठकों पर स्ट्रिंग "("

println "Hello World(1)".split("W"); 

आउटपुट:

[Hello , orld(1)] 

मैं इस विभाजन प्रदर्शन करने के लिए करना चाहते हैं:

println "Hello World(1)".split("("); 

लेकिन मुझे लगता है:

Caught: java.util.regex.PatternSyntaxException: Unclosed group near index 1 (

क्या कोई तरीका है कि मैं इस कोष्ठक से बच सकता हूं? किसी भी मदद की सराहना की है।

+1

तो आप इसे इस से बचने के लिए की जरूरत है '\\ (' – ant

+1

कि भागने से काम नहीं करता @ant –

+1

क्षमा करें डबल बैक स्लैश – ant

उत्तर

40
println "Hello World(1)".split("\\("); 
+0

यह मेरे लिए धन्यवाद, धन्यवाद! मैं केवल एक कोशिश कर रहा था \ –

17

split विधि नियमित अभिव्यक्ति पैटर्न लेती है।

आप "सिर्फ एक नियमित रूप से स्ट्रिंग" पर विभाजित करना चाहते हैं, तो आप उपयोग कर सकते हैं Pattern.quote पहली स्ट्रिंग उद्धृत करने के लिए:

println "Hello World(1)".split(Pattern.quote("(")) 
+0

या आप '\\ ("', जो पहले से बच निकलता है \\ ('to' \ (', फिर regex इंजन से बचता है \'' (' शाब्दिक कोष्ठक – jedyobidan

+0

यह दिलचस्प है .. मैंने इस परिस्थिति में Pattern.quote() का उपयोग करने के बारे में नहीं सोचा था। अच्छा जवाब जॉन –

+0

@jedyobidan: ठीक है कि 'Pattern.quote' क्या करेगा - इसका मतलब है कि आपको इसे मैन्युअल रूप से करने की आवश्यकता नहीं है ... –

0

आप ब्रैकेट चरित्र से बचने के लिए ठीक से

println "Hello World(1)".split("\\(") 
1

ग्रोवी देशी रेगेक्स सिंटैक्स का उपयोग करते समय आप एक भी बच निकल सकते हैं:

assert "Hello World(1)".split(/\(/) == ["Hello World", "1)"] 
0

विभाजन बस रेगेक्स स्वीकार करें, आपको इसे बच निकलने वाले चरित्र के रूप में पास करना होगा। इस के लिए, आप इसे के सामने

\(

में एक बैकस्लैश संलग्न करना होगा लेकिन इसके बाद के संस्करण के रूप में एक वैध जैसे चरित्र बच गए, क्योंकि यह पार्स किया गया है एक संकलन त्रुटि है:

\t Tab 
\n New Line or Line Feed 
\r Carriage Return 

तो, आप एक से गुजरना होगा गैर अर्थ चरित्र (उदाहरण के लिए कोष्ठक) 2 बैकस्लैश के साथ:

\\(

अंत:

println "Hello World(1)".split("\\("); 

या आप कर सकते हैं भी वर्ग पैटर्न नामित की जावा builtin समारोह से सब बातों बोली कार्य करें:

println "Hello World(1)".split(Pattern.quote("(")); 
संबंधित मुद्दे