2011-08-04 14 views
11

में स्ट्रिंग को प्रतिस्थापित करें क्या वापसी मूल्य निर्दिष्ट किए बिना स्ट्रिंग में एक सबस्ट्रिंग को प्रतिस्थापित करना संभव है?सी # स्ट्रिंग

मैं एक स्ट्रिंग है:

string test = "Hello [REPLACE] world"; 

और मैं कुछ और के साथ-स्ट्रिंग [REPLACE] बदलना चाहते हैं:

test = test.replace("[REPLACE]", "test"); 

यह ठीक काम करता है, लेकिन मैं इसे कैसे करने के लिए दिया गया मान बताए कर सकते हैं एक परिवर्तनीय? मैं कुछ इस तरह हैं:

test.replace("[REPLACE]", "test"); 

उत्तर

26

आप नहीं कर सकते, क्योंकि string अपरिवर्तनीय है। यह डिज़ाइन किया गया था ताकि स्ट्रिंग में कोई भी "परिवर्तन" वास्तव में एक नया string ऑब्जेक्ट का निर्माण करेगा। इस प्रकार, यदि आप रिटर्न वैल्यू (जो "अपडेटेड" स्ट्रिंग है, वास्तव में लागू स्ट्रिंग के साथ मूल स्ट्रिंग की प्रतिलिपि निर्दिष्ट नहीं करते हैं), तो आपने उन परिवर्तनों को प्रभावी रूप से त्याग दिया है जिन्हें आप बनाना चाहते थे।

यदि आप इन-प्लेस परिवर्तन करना चाहते हैं, तो आप सिद्धांत में सीधे char[] (वर्णों की सरणी) के साथ काम कर सकते हैं, लेकिन यह खतरनाक है, और इससे बचा जाना चाहिए।

एक अन्य विकल्प (जैसा कि नीचे श्री स्कीट द्वारा इंगित किया गया है) StringBuilder और इसकी Replace() विधि का उपयोग करना है। ऐसा कहा जा रहा है कि आपके द्वारा दिखाए गए सरल प्रतिस्थापन काफी तेज हैं, इसलिए आप StringBuilder से परेशान नहीं होना चाहेंगे जबतक कि आप अक्सर ऐसा नहीं करेंगे।

1

आप नहीं, तार नेट

.NET में
1

स्ट्रिंग्स अपरिवर्तनीय हैं में अडिग हैं कर सकते हैं, वे इन-लाइन संपादित नहीं किया जा सकता है।

निकटतम आप इनलाइन संपादन में प्राप्त कर सकते हैं एक स्ट्रिंग से StringBuilder बनाने के लिए, इसकी सामग्री के साथ इन-लाइन फीडल और फिर इसे एक स्ट्रिंग को फिर से थूकने के लिए प्राप्त करें। लेकिन यह मूल को बदलने के बजाय अभी भी एक नई स्ट्रिंग का उत्पादन करेगा। यह एक उपयोगी तकनीक है, हालांकि, कई स्ट्रिंग फिडलिंग करते समय बहुत से मध्यस्थ तारों को उत्पन्न करने से बचने के लिए, उदा। एक पाश में

0

आप नहीं कर सकते हैं, सी # तारों में अपरिवर्तनीय हैं। ऐसा कुछ ऐसा उल्लंघन करेगा। आपको रिटर्न प्रकार की स्ट्रिंग की आवश्यकता है क्योंकि जिस व्यक्ति के साथ आप काम कर रहे हैं वह बदल नहीं सकता है।

23

dlev से उल्लेख किया है, आप string साथ ऐसा नहीं कर सकते के रूप में तार .NET में अपरिवर्तनीय कर रहे हैं - एक बार एक स्ट्रिंग निर्माण किया गया है, वहाँ कुछ भी नहीं आप कर सकते हैं (असुरक्षित कोड या प्रतिबिंब को छोड़कर) सामग्री कैसे बदल सकते हैं । यह तार आम तौर पर आसान, के साथ काम करने के रूप में आप बचाव की मुद्रा में नकल के बारे में चिंता करने की जरूरत नहीं है, वे स्वाभाविक रूप से कर रहे हैं थ्रेड-सुरक्षित आदि

इसके परिवर्तनशील चचेरे भाई, तथापि, StringBuilder है - जो एक Replace विधि है इन-ऑब्जेक्ट प्रतिस्थापन करने के लिए।उदाहरण के लिए:

string x = "Hello [first] [second] world"; 

StringBuilder builder = new StringBuilder(x); 
builder.Replace("[first]", "1st"); 
builder.Replace("[second]", "2nd"); 

string y = builder.ToString(); // Value of y is "Hello 1st 2nd world" 
+0

बहुत बहुत धन्यवाद :) आप मेरे सहायक फिर से बहुत अच्छे हैं। – jeb

0

यहाँ string.replace.You जबकि manipulating.Here में html पृष्ठ मैं StringBuilder उपयोग करने के लिए नहीं कर सकते एचटीएमएल से स्ट्रिंग लाए जाने और इसे पारित करने के StringBuilder कोड और अपने variable.You से सेट मूल्य है [नाम] जोड़ें जिसे कोड के पीछे कोड से प्रतिस्थापित किया गया है। सुनिश्चित करें कि [नाम] अद्वितीय है या आप कोई अद्वितीय नाम दे सकते हैं।

string Name = txtname.Text; 
string contents = File.ReadAllText(Server.MapPath("~/Admin/invoice.html")); 

       StringBuilder builder = new StringBuilder(contents); 

       builder.Replace("[Name]", Name); 

       StringReader sr = new StringReader(builder.ToString()); 
संबंधित मुद्दे