2008-11-13 15 views
28

यदि आपको परीक्षण 50 बार प्रतिस्थापित करने के लिए स्ट्रिंग.रिप्लेस() का उपयोग करना है, तो आपको अनिवार्य रूप से 50 बार एक नई स्ट्रिंग बनाना होगा। StringBuilder.Replace() यह और अधिक कुशलता से करते हैं? उदाहरण के लिए, क्या मुझे स्ट्रिंगबिल्डर का उपयोग करना चाहिए यदि मैं बहुत सारे टेक्स्ट को प्रतिस्थापित करने जा रहा हूं, भले ही मैं इसमें कोई डेटा नहीं जोड़ूं?स्ट्रिंगबिल्डर है। जगह बदलें() स्ट्रिंग से अधिक कुशल। जगह बदलें?

मैं .NET का उपयोग कर रहा हूं, लेकिन मुझे लगता है कि यह जावा और संभवतः अन्य भाषाओं के समान होगा।

+3

स्ट्रिंगबिल्डर। जगह को कम स्मृति का उपयोग करना चाहिए, लेकिन यह स्ट्रिंग से अधिक प्रदर्शन नहीं करेगा। Http://www.codeproject.com/KB/cs/StringBuilder_vs_String.aspx –

उत्तर

29

यह बिल्कुल प्रकार की चीज है स्ट्रिंगबिल्डर एक ही टेक्स्ट ऑब्जेक्ट के बार-बार संशोधन के लिए है - यह केवल दोहराए गए संयोजन के लिए नहीं है, हालांकि ऐसा लगता है कि इसका उपयोग आमतौर पर किया जाता है।

5

हां, यह है। String.Replace हमेशा एक नई स्ट्रिंग बनाता है - StringBuilder.Replace नहीं करता है।

+2

बदलें यह पूरी तरह से सच नहीं है, इसे देखें सोर्स कोड। StringBuilder.replace() AbstractStringBuilder.replace() को कॉल कर रहा है जो आवश्यक होने पर AbstractStringBuilder.expandCapacity() को कॉल कर रहा है। सारस्ट्रिंगब्यूल्डर.एक्सपैंड कैपेसिटी() Arrays.copyOf() को कॉल कर रहा है जो वर्णों की एक नई सरणी बनाता है - और यह एक नई स्ट्रिंग बनाने जैसा ही है। –

+4

@Avi: "स्ट्रिंग नहीं है" संदर्भित करता है "हमेशा स्ट्रिंग करें। * हमेशा * एक नई स्ट्रिंग बनाता है", "हमेशा" पर जोर दें। –

8

यह निर्भर करता है अगर प्रतिस्थापन के आकार larger than the string replaced.

अपने बफर आवंटित खत्म हो गया है StringBuilder , जबकि एक स्ट्रिंग ही कभी धारण कैसे कभी कई पात्रों उस में कर रहे हैं।

स्ट्रिंगबिल्डर। क्षमता गुण यह है कि बफर कितने पात्र होंगे, जबकि स्ट्रिंगबिल्डर। लम्बाई यह है कि कितने वर्ण उपयोग में हैं।

आम तौर पर आपको स्ट्रिंगबिल्डर। क्षमता को अपेक्षाकृत परिणामी स्ट्रिंग के बाद बड़े मान पर सेट करना चाहिए। अन्यथा स्ट्रिंगबिल्डर को अपने बफर को फिर से स्थानांतरित करने की आवश्यकता होगी। StringBuilder अपने बफर से पुनर है, तो यह आकार में दोगुना हो जाता है, जिसके बाद एक जोड़े से पुनर यह शायद काफी बड़ा तो यह हो सकता है की जरूरत है, डिफ़ॉल्ट क्षमता से मतलब है 16.

पर शुरू होता है क्षमता मूल्य जब आप की स्थापना करके शुरू करें (उदाहरण के लिए कन्स्ट्रक्टर में) आप स्ट्रिंगबिल्डर के बफर के पुनर्विक्रय को सहेजते हैं। आप StringBuilder.MaxCapacity का उपयोग अधिकतम क्षमता तक सीमित करने के लिए कर सकते हैं जो स्ट्रिंगबिल्डर को विस्तारित किया जा सकता है।

+1

स्ट्रिंगबिल्डर के साथ एक स्ट्रिंग बनाता है जो अक्सर "उपयोगी" वर्णों की संख्या से अधिक पकड़ लेता है - क्योंकि स्ट्रिंगबिल्डर वास्तव में केवल एक स्ट्रिंग होता है जो इसे अपने बफर के रूप में उपयोग करता है। –

संबंधित मुद्दे