2011-12-13 10 views
19

मैं एक स्ट्रिंग है और जब मैं replaceAll विधि चलाने का प्रयास है, मैं इस अजीब त्रुटि हो रही है:जावा स्ट्रिंग ReplaceAll विधि अवैध पुनरावृत्ति त्रुटि दे रहा है?

String str = "something { } , op"; 
str = str.replaceAll("o", "\n"); // it works fine 
str = str.replaceAll("{", "\n"); // does not work 

और मैं एक अजीब त्रुटि मिलती है:

Exception in thread "main" java.util.regex.PatternSyntaxException: 
Illegal repetition { 

मैं घटनाओं कैसे बदल सकते हैं "{" का?

उत्तर

32

{ रेंज पुनरावृत्ति के लिए {min,max} के रूप में उपयोग किए जाने वाले रेगेक्स मेटा-वर्ण है। मैच के लिए एक शाब्दिक { आप एक \\ साथ यह पूर्ववर्ती द्वारा यह से बचने के लिए की जरूरत है:

str = str.replaceAll("\\{", "\n"); // does work 
+0

शायद टिप्पणी भी बदलें :) –

+0

@ कुबलईखान: :) – codaddict

+0

@ कोडडिक्ट, धन्यवाद – Johnydep

5
यह भागने

:

str = str.replaceAll("\\{", "\n"); 

यह इसलिए आवश्यक है क्योंकि replaceAll() को पहले तर्क एक regular expression है, और { जावा नियमित अभिव्यक्ति में एक विशेष अर्थ (यह एक पुनरावृत्ति ऑपरेटर, इसलिए त्रुटि संदेश नहीं है) है ।

+0

आपको बहुत धन्यवाद – Johnydep

11

तुम सच में एक अक्षर और नहीं regexes को बदलने के लिए (है जो आप यहाँ क्या करना चाहते करने लगते हैं) चाहते हैं तो आपको चाहिए .replace() का उपयोग करें, .replaceAll() पर नहीं। इसके नाम के बावजूद, .replace() सभी घटनाओं को प्रतिस्थापित करेगा, न केवल पहले।

और यदि आप सोचते हैं, StringCharSequence लागू करता है, तो .replace("{", "\n") काम करेगा।

+0

हाँ मुझे पता है कि मैं सभी घटनाओं को प्रतिस्थापित करना चाहता था – Johnydep

+1

जैसा कि मैंने कहा था, '.replace()' * * * इसके नाम के बावजूद सभी घटनाओं को प्रतिस्थापित करेगा! – fge