2010-11-05 21 views
5

मैं चार "$" वाले एक सबस्ट्रिंग को प्रतिस्थापित करने की कोशिश कर रहा हूं। मुझे यह सुनकर खुशी होगी कि उसने ऐसा क्यों नहीं किया, और यह कैसे काम करेगा।सबस्ट्रिंग को बदलें (प्रतिस्थापित करें) वर्कअराउंड

धन्यवाद, user_unknown

public class replaceall { 
    public static void main(String args[]) { 
     String s1= "$foo - bar - bla"; 
     System.out.println("Original string:\n"+s1); 
     String s2 = s1.replaceAll("bar", "this works"); 
     System.out.println("new String:\n"+s2); 
     String s3 = s2.replaceAll("$foo", "damn"); 
     System.out.println("new String:\n"+s3); 
    } 

} 
+0

और यह प्रिंट क्या करता है? '$ foo - यह काम करता है - bla'? – Entity

+0

स्ट्रिंग.रेप्लेसएल के साथ बैकस्लैश समस्या का संभावित डुप्लिकेट (http://stackoverflow.com/questions/1701839/backslash-problem-with-string-replaceall) – McDowell

उत्तर

14

Java's .replaceAll परोक्ष Regex का उपयोग करता है को बदलने के लिए। इसका मतलब है, $foo को रेगेक्स पैटर्न के रूप में व्याख्या किया गया है, और $ रेगेक्स में विशेष है (जिसका मतलब है "स्ट्रिंग का अंत")।

आप $

रूप
String s3 = s2.replaceAll("\\$foo", "damn"); 

अगर लक्ष्य एक चर से बचने के लिए, Pattern.quote का उपयोग जावा पर ≥1.5 सभी विशेष वर्ण से बचें करने की जरूरत है, और अगर प्रतिस्थापन भी एक चर रहा है, Matcher.quoteReplacement का उपयोग करें।

String s3 = s2.replaceAll(Pattern.quote("$foo"), Matcher.quoteReplacement("damn")); 

जावा ≥1.5 पर, आप use .replace instead कर सकते हैं।

String s3 = s2.replace("$foo", "damn"); 

परिणाम: http://www.ideone.com/Jm2c4

+1

बहुत अच्छा जवाब है, लेकिन IMHO आप गलत समस्या को हल कर रहे हैं। –

+2

यह भी ध्यान दें कि 'replaceAll()' के लिए प्रतिस्थापन स्ट्रिंग को भी भागने की आवश्यकता हो सकती है ('पैटर्न.क्वोट रिप्लेसमेंट()' के साथ)। – axtavt

+0

@axtavt: अच्छा बिंदु –

5

IIRC, एक regex ले replaceAll:, $ से बचने के लिए प्रयास करें इस तरह:

String s3 = s2.replaceAll("\\$foo", "damn"); 
9

आप Regex कार्यक्षमता की जरूरत नहीं है, regex संस्करण का उपयोग नहीं करते।

उपयोग String.replace(str, str) बजाय:

String s = "$$$"; 
String rep = s.replace("$", "€"); 
System.out.println(rep); 
// Output: €€€ 

संदर्भ:

+1

+1 - मैं यह उत्तर स्वीकार कर लिया था। प्रतिस्थापित करें एक पैटर्न के मैचों को प्रतिस्थापित करने के लिए है, चार अनुक्रम प्रतिस्थापन के लिए प्रतिस्थापित करें (जो वही है जो हम यहां चाहते हैं) –

0
public static String safeReplaceAll(String orig, String target, String replacement) { 
    replacement = replacement.replace("$", "\\$"); 
    return orig.replaceAll(target, replacement); 
}