replaceAll(target, replacement)
target
के लिए नियमित अभिव्यक्ति (रेगेक्स) वाक्यविन्यास का उपयोग करता है और आंशिक रूप से replacement
के लिए उपयोग करता है।
समस्या है कि \
regex में विशेष वर्ण है (जैसे \d
अंकों का प्रतिनिधित्व करता है) और स्ट्रिंग में है शाब्दिक (जैसे \n
दोहरे उद्धरण प्रतीक को प्रदर्शित करने लाइन विभाजक या \"
बनाने के लिए), और \
प्रतीक बनाने के लिए हम इसे से बचने के लिए की जरूरत है इन दोनों स्तरों पर अतिरिक्त \
के साथ।
तो target
regex जो \
प्रतीक हम इसे दो बार से बचने के लिए की जरूरत का प्रतिनिधित्व करेगा बनाने के लिए: रेगुलर एक्सप्रेशन \\
स्ट्रिंग में
- शाब्दिक
"\\\\"
(प्रत्येक \
अपने स्वयं के अतिरिक्त \
से पहले की जरूरत है)।
replacement
\
के मामले में भी विशेष एक अन्य विशेष वर्ण जो $
है से बचने के लिए है। $x
नोटेशन के माध्यम से, रेगेक्स द्वारा मिलान किए गए डेटा का हिस्सा प्रतिस्थापित किया जा सकता है और प्रतिस्थापन में पुन: उपयोग किया जा सकता है, जैसे replaceAll("(\d)", "$1$1")
प्रत्येक अंक को डुप्लिकेट करेगा।
तो फिर, replacement
में एकल\
के लिए हम दो बैकस्लैश का प्रतिनिधित्व पाठ की जरूरत है:
\\
- लेकिन स्ट्रिंग शाब्दिक
"\\\\"
तरह \\
नज़र का प्रतिनिधित्व लेकिन जब से हम चाहते हैं दोडालने के लिए प्रतिस्थापन मेंहमें "\\\\\\\\"
की आवश्यकता है (दो "\\\\"
)।
replaceAll("\\\\", "\\\\\\\\");
बाहर बनाने के लिए जीवन को आसान जावा स्वचालित रूप से target
और replacement
भागों में पाठ से बचने के लिए उपकरण प्रदान करता है। तो अब हम केवल तार पर ध्यान केंद्रित कर सकते हैं और रेगुलर एक्सप्रेशन से वाक्य रचना के बारे में भूल:
replaceAll(Pattern.quote(target), Matcher.quoteReplacement(replacement))
जो हमारे मामले में की तरह
replaceAll(Pattern.quote("\\"), Matcher.quoteReplacement("\\\\"))
या और भी आसान है अगर हम का उपयोग नहीं करना चाहते हैं देख सकते हैं regex में replaceAll
शामिल नहीं है और इसके बजाय replace
का उपयोग करने दें (दोनों विधियां सभी target
एस को प्रतिस्थापित करेंगी, लेकिन दूसरे में रीगेक्स वाक्यविन्यास शामिल नहीं है)। तो आप बस
theString = theString.replace("\\", "\\\\")
असल में, इसका उपयोग जावास्क्रिप्ट एएसटी में किया जाता है जिसे स्रोत में वापस परिवर्तित किया जाना चाहिए। आपका समाधान काम करता है। धन्यवाद! –
यदि आप 'स्ट्रिंग # replaceAll()' का उपयोग करना चाहते हैं, तो आप [Matcher # quoteReplacement()] के साथ प्रतिस्थापन स्ट्रिंग को उद्धृत कर सकते हैं (http://docs.oracle.com/javase/7/docs/api/java/ उपयोग/regex/Matcher.html # उद्धरण प्रतिस्थापन (java.lang.String)): 'theString.replaceAll (" \\ ", Matcher.quoteReplacement (" \\\\ "));' –