2011-08-26 13 views
9

के साथ एक उद्धरण को प्रतिस्थापित नहीं करता है एक बच निकलने वाले उद्धरण के साथ उद्धरण को बदलने में कठिनाई होती है। मेरे पास एक स्ट्रिंग है जिसमें 'फू "बार" फूबर' का मूल्य है, और मैं बच निकले उद्धरणों के साथ बार के चारों ओर उद्धरणों को प्रतिस्थापित करने की कोशिश कर रहा हूं, और यह काम नहीं कर रहा है। मैं पागल हो रहा हूँ।जावा स्ट्रिंग.replaceAll बच निकले उद्धरण

s=s.replaceAll("\"","\\\""); 

मुझे उम्मीद है कि 'foo \ "bar \" foobar' का मान होगा, लेकिन ऐसा नहीं है। कोई मदद?

उत्तर

19

replaceAll नियमित अभिव्यक्तियों का उपयोग करता है - जिसमें बैकस्लैश प्रतिस्थापन में भी अगले चरित्र से बच निकलता है।

उपयोग replace बजाय और यह ठीक है ... या आप दूसरा तर्क में बैकस्लैश दोगुना आप नियमित अभिव्यक्ति फार्म का उपयोग करना चाहते हैं तो कर सकते हैं:

String after = before.replaceAll("\"", "\\\\\""); 

यह उपयोगी हो सकता है अगर आप मिलान करने की आवश्यकता नियमित अभिव्यक्तियों का उपयोग करके इनपुट, लेकिन मैं दृढ़ता से गैर-रेगेक्स फॉर्म का उपयोग करने की अनुशंसा करता हूं जबतक कि आप वास्तव में regex व्यवहार की आवश्यकता नहीं है।

निजी तौर पर मुझे लगता है कि यह String में तरीकों के लिए एक गलती नियमित अभिव्यक्ति का उपयोग करने के साथ शुरू करने के लिए था - foo.split(".") तरह बातें जो असावधान डेवलपर के लिए के प्रत्येक वर्ण बजाय अवधियों पर बंट जाएगा, पूरी तरह से अप्रत्याशित रूप से।

+3

+1, 'विभाजन के लिए ("। ")'। मुझे इससे नफरत है ... –

9

s = s.replace("\"", "\\\""); का उपयोग करें, जो गैर-रेगेक्स संस्करण है।

1
s=s.replaceAll("\"","\\\\\""); 

लेकिन क्या तुम सच में replace(...) दूसरों को यहाँ सलाह के रूप में के साथ जाना चाहिए।

1

उपयोग;

s=s.replaceAll("\"","\\\\\""); 
0

कृपया नीचे दिए गए प्रोग्राम का पालन करें और> s.replace ("/"."//") का उपयोग करें;

public class stringbackslash { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     String s="\"; 
     s=s.replace("\", "\\"); 
     System.out.println(s); 

    } 

} 
2

आपको सभी तर्कों को प्रतिस्थापित करने से बचने की आवश्यकता है क्योंकि वे regex हैं!

@Test 
public void testReplace() { 
    assertEquals("foo\\\"bar\\\"", 
       "foo\"bar\"".replaceAll("\\\"", "\\\\\\\"")); 
} 

तो अगर आप " लिखना चाहते हैं आप रेगुलर एक्सप्रेशन से बचने के लिए की जरूरत है ->\" लेकिन आप \ और " जावा के लिए से बचने के लिए की जरूरत है, क्योंकि आप जावा में हैं, इसलिए आप \\\\" मिलता है। (वह खोज पैरामीटर है)।

की जगह पैरामीटर आप \" करना चाहते हैं के लिए -> regex में: \\\" -> जावा \\\\\\\" में

+0

बिल्कुल स्पष्टीकरण मैंने सोचा था कि ऊपर लापता था! धन्यवाद – Engineiro

1
String str = "'Foo \"Bar\" Bar'"; 
System.out.println(str);   
System.out.println(str.replaceAll("\"", "\\\\\"")); 
संबंधित मुद्दे