2011-04-08 12 views
20

को प्रतिस्थापित करता है मैं बैक स्लैश की स्ट्रिंग प्रतिस्थापन कैसे कर सकता हूं।स्ट्रिंग बैकस्लैश

इनपुट स्रोत स्ट्रिंग:

sSource = "http://www.example.com\/value"; 

ऊपर स्ट्रिंग मैं बदलना चाहते हैं "\ /" के साथ एक "/" में;

उम्मीद ouput के बाद बदल देते हैं:

sSource = "http://www.example.com/value"; 

मैं किसी तीसरे पक्ष से स्रोत स्ट्रिंग मिलता है, इसलिए मैं स्ट्रिंग के प्रारूप पर नियंत्रण है।

sSource.replaceAll("\\", "/"); 

अपवाद अप्रत्याशित आंतरिक सूचकांक 1 पास त्रुटि \

ट्रायल 2:

sSource.replaceAll("\\/", "/"); 

यह है कि मैं क्या

ट्रायल 1 की कोशिश की है हैकोई अपवाद नहीं है, लेकिन आवश्यक प्रतिस्थापन नहीं करता है। कुछ भी नहीं करता है।

ट्रायल 3:

sVideoURL.replace("\\", "/"); 

कोई अपवाद है, लेकिन आवश्यक की जगह नहीं करता है। कुछ भी नहीं करता है।

+0

btw, तुम स्रोत नहीं हो सकता '\ /' आप अगर इसे एक स्ट्रिंग शाब्दिक के रूप में घोषित करें। लेकिन मुझे लगता है कि यह कहीं और से आ रहा है। – Bozho

+0

आपके उदाहरण में, आप कुछ भी नहीं, \ n के साथ नहीं बदलते हैं; पहले से ही एक फॉरवर्ड स्लैश है। –

+0

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

उत्तर

33
sSource = sSource.replace("\\/", "/"); 
  • String अपरिवर्तनीय है - प्रत्येक विधि आप उस पर आह्वान अपने राज्य नहीं बदलता है। यह इसके बजाय नए राज्य को पकड़ने वाला एक नया उदाहरण देता है। इसलिए आपको एक वैरिएबल को नया मान असाइन करना होगा (यह वही चर हो सकता है)
  • replaceAll(..) रेगेक्स का उपयोग करता है। आपको इसकी आवश्यकता नहीं है।
4

प्रयास करें

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

संपादित करें: ठीक भी stackoverflow में वहाँ है बैकस्लैश बच ... आप अपने replaceAll पहले स्ट्रिंग तर्क में चार बैकस्लैश की आवश्यकता है ...

इस का कारण ऐसा इसलिए है क्योंकि बैकस्लैश को विशेष वर्णों के लिए एक बचने वाला चरित्र माना जाता है (उदाहरण के लिए \ n)।
इसके अलावा प्रतिस्थापित करें पहला पहला तर्क एक नियमित अभिव्यक्ति है जो बैकस्लैश का उपयोग बचने के अनुक्रम के रूप में भी करता है।
तो नियमित अभिव्यक्ति के लिए आपको 2 बैकस्लैश पास करने की आवश्यकता है। प्रतिलिपि करने के लिए जावा स्ट्रिंग द्वारा उन दो बैकस्लाश को पार करने के लिए, आपको बैकस्लैश दोनों से बचने की भी आवश्यकता है।
जो आपको अपनी अभिव्यक्ति के लिए चार बैकस्लैश रखने के लिए प्रेरित करता है! जावा में रेगेक्स की सुंदरता है;)

+0

काम नहीं करेगा। प्रतिस्थापित करने के बजाय प्रतिस्थापित करें() का उपयोग करें() या चार बैकस्लाश –

+0

स्टैक ओवरफ्लो सिंटैक्स के लिए, पार्सिंग अक्षम करने के लिए सामने या 'चार रिक्त स्थान का उपयोग करें (और इसे कोड के रूप में प्रारूपित करें) का उपयोग करें। –

+1

हाँ मैंने नहीं देखा कि मेरी बैकस्लैश बच नहीं गई थी :) मैंने अपना जवाब संपादित किया – greydet

17

replaceAll("\\\\", "") या replaceAll("\\\\/", "/") आज़माएं।

समस्या यह है कि बैकस्लैश (1) जावा-स्ट्रिंग्स में एक एस्केप-कैरेक्टर है, और (2) नियमित अभिव्यक्तियों में एक एस्केप-कैरेक्टर - इस उपयोग में से प्रत्येक को चरित्र को दोगुनी करने की आवश्यकता होती है, असल में 4 \ की आवश्यकता होती है पंक्ति में।


संपादित करें: बेशक, के रूप में Bozho कहा, तुम परिणाम (कुछ चर के लिए असाइन करें) और उसे फेंक नहीं के साथ कुछ करने की जरूरत है। और इस मामले में गैर-रेगेक्स संस्करण बेहतर है।

1

आप क्योंकि backshlash नियमित अभिव्यक्ति

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

में स्रोत से एक में स्ट्रिंग के लिए दो बार एक भाग निकले जाना चाहिए

sSource.replaceAll("\\\\/", "/"); 

क्या करना है आप अपने स्रोत में एक बैकस्लैश नकाब और के लिए की जरूरत है, regex, आपको इसे फिर से मुखौटा करने की आवश्यकता है, इसलिए प्रत्येक बैकस्लैश के लिए आपको दो की आवश्यकता होती है, जो 4 में समाप्त होती है।

लेकिन

s = "http://www.example.com\\/value"; 

को स्रोत में दो बैकस्लैश की भी आवश्यकता है।

3

यह बैकस्लैश आगे के साथ स्ट्रिंग में स्लैश का स्थान ले लेगा:

source = source.replace('\\','/'); 
+0

सादा और सरल: डी और कोई regexp;) – FibreFoX

0
sSource = StringUtils.replace(sSource, "\\/", "/") 
+0

क्या आप समझा सकते हैं कि ओपी के कोड में क्या गलत था और यह उपयोग करने के लिए बेहतर क्यों है? – vyegorov

0

विशेष स्थान पर बैकस्लैश बदलें करने के लिए:

if ((stringValue.contains("\\"))&&(stringValue.indexOf("\\", location-1)==(location-1))) { 
    stringValue=stringValue.substring(0,location-1); 
} 
संबंधित मुद्दे