2010-01-09 11 views
20

मेरे कार्यक्रम में में मिलान समस्या जब मैंस्ट्रिंग पैटर्न जावा

line.replaceAll("(", "_"); 

उपयोग कर रहा हूँ मैं एक RuntimeException मिला:

at java.util.regex.Pattern.error(Unknown Source) 
at java.util.regex.Pattern.accept(Unknown Source) 
at java.util.regex.Pattern.group0(Unknown Source) 
at java.util.regex.Pattern.sequence(Unknown Source) 
at java.util.regex.Pattern.expr(Unknown Source) 
at java.util.regex.Pattern.compile(Unknown Source) 
at java.util.regex.Pattern.<init>(Unknown Source) 
at java.util.regex.Pattern.compile(Unknown Source) 
at java.lang.String.replaceAll(Unknown Source) 
at Processing.processEarly(Processing.java:95) 
at Processing.main(Processing.java:34) 

तो ऐसा कोई कारण है? हम इससे कैसे बच सकते हैं?

उत्तर

37

string.replaceAll पर पहला तर्क एक नियमित अभिव्यक्ति है, केवल एक स्ट्रिंग नहीं। उद्घाटन छोड़ दिया ब्रैकेट एक regex में विशेष वर्ण है, इसलिए आप इसे पलायन करना होगा: वैकल्पिक रूप से

line.replaceAll("\\(", "_"); 

, क्योंकि आप एक ही चरित्र को बदल रहे हैं, तो आप ऐसा तरह string.replace इस्तेमाल कर सकते हैं:

line.replace('(', '_'); 
+0

लॉरेन के संपादन के लिए धन्यवाद! डी 'ओह! –

+5

'String.replace' का उपयोग शाब्दिक (गैर-रेगेक्स) प्रतिस्थापन के लिए भी किया जा सकता है। – McDowell

+0

धन्यवाद - उत्तर में जोड़ा गया। मछली पकड़ने के तरीके के लिए –

2

स्टैक ट्रेस ऊपर त्रुटि संदेश है (कुछ) उपयोगी: सूत्र में

अपवाद "मुख्य" java.util.regex.PatternSyntaxException: Uncl "रेगुलर एक्सप्रेशन" सूचकांक 1 ( ^

पास osed समूह (यही तो मैं जावा 6. में मिलता है) यह उल्लेख है, "समूह", और कोष्ठक। अगर आप यह संदेश नहीं देख पा रहे हैं, तो आपको यह जांचना चाहिए कि आप अपवाद कैसे लॉगिंग/पकड़/प्रदर्शित कर रहे हैं। यह आपको भविष्य में कुछ परेशानी बचा सकता है।

+0

+1। – trashgod

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