RegEx के बिना String.replaceAll


115

मैं एक स्ट्रिंग में सबरिंग के सभी उदाहरणों को बदलना चाहता हूं, लेकिन String.replaceAll()केवल एक पैटर्न को स्वीकार करता हूं । मैं पिछले मैच से आया था। क्या मेरे पास उस पैटर्न से पलायन को जोड़ना संभव है या replaceAll()किसी अन्य वर्ग का एक संस्करण है जो पैटर्न के बजाय शाब्दिक स्ट्रिंग को स्वीकार करता है?


जवाबों:


189

के String.replace(CharSequence,CharSequence)बजाय का उपयोग करें replaceAll


13
यह सिर्फ पहली जगह नहीं है? अजीब है कि उन्होंने इसे "रीप्लेरिजेक्स" के बजाय "रिप्लाय" कहा।
मैजिक ऑक्टोपस Urn

6
System.out.println("hello world, hello life, hello you".replace("hello","hi"));लौटता है "hi world, hi life, hi you"
थियागो माता

14
@MagicOctopusUrn: हाँ, मैं मानता हूँ कि यह बहुत खराब नामकरण था - यह समय के साथ बहुत भ्रम पैदा करता है।
जॉन स्कीट

विधियों का बहुत बुरा नामकरण। वे (सूरज / दैवज्ञ) सरल चीजों को जटिल क्यों बनाते हैं
स्टनर

93

पलायन को जोड़ने की विधि है Pattern.quote()

String replaced = myString.replaceAll(Pattern.quote(matchingStr), replacementStr)

लेकिन जैसा कि जॉन कहते हैं कि आप बस इस्तेमाल कर सकते हैं replace()। इस तथ्य के बावजूद कि यह replaceAllनाम से भटकता है , यह सभी घटनाओं की तरह ही करता है replaceAll()


पूरी तरह से काम करता है यदि आप उदाहरण के लिए अपने मैचस्ट्रीम में "$" का हवन करते हैं।
जूलियन लाफोंट

बल्कि pattern.compile (); प्रतिमान .quote () अवांछनीय परिणाम लाता है
पावलो

@PavloZvarych: Pattern.compile()स्ट्रिंग को एक नियमित अभिव्यक्ति के रूप में संकलित करता है, जिसका अर्थ है कि विशेष वर्णों को विशेष अर्थ दिया जाएगा। यह क्या Pattern.quote()करता है, और क्या ओपी के लिए पूछ रहा था के पूर्ण विपरीत है ( quote()कहते हैं, "स्ट्रिंग को शाब्दिक रूप से मानते हैं")। हो सकता है कि आप जिस "अवांछनीय परिणाम" के बारे में बात कर रहे हों उसका विस्तार कर सकें।
मार्क पीटर्स

@MarkPeters यह "$ 1" के लिए \\ G1 \\ G जैसा कुछ था
पावलो

1
@PavloZvarych: यदि आप प्रतिस्थापन (और खोज पैटर्न नहीं) को उद्धृत करने का प्रयास कर रहे हैं, तो आप उपयोग करना चाहते हैं Matcher.quoteReplacement("$aa +")Pattern.compile()उत्पादन करता है Pattern, नहीं String, तो यह मेरे लिए अस्पष्ट है कि आप इसे कैसे उपयोग कर रहे हैं replaceAll
मार्क पीटर्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.