C# में, स्ट्रिंग्स अपरिवर्तनीय हैं। इसका मतलब है कि एक बार बनने के बाद आप स्ट्रिंग को संशोधित नहीं कर सकते। स्ट्रिंग में कोई भी संशोधन एक नई स्ट्रिंग लौटाता है जिसमें संशोधन होता है, मूल स्ट्रिंग को बरकरार रखते हुए।
string word = "aaabbbccc"; string newWord = word.Replace('b', 'd'); Console.WriteLine(word); // prints aaabbbccc Console.WriteLine(newWord); // prints aaadddcccStringBuilder क्लास एक स्ट्रिंग-जैसी ऑब्जेक्ट को दर्शाती है जिसे संशोधित किया जा सकता है, यानी वर्णों की एक परिवर्तनीय स्ट्रिंग। यह स्ट्रिंग प्रकार से अलग तरीके से लागू किया गया है, जो वर्णों की एक अपरिवर्तनीय स्ट्रिंग को दर्शाता है।
चूंकि स्ट्रिंग ऑब्जेक्ट को संशोधित करने से एक कॉपी बनती है, बार-बार स्ट्रिंग ऑब्जेक्ट्स को संशोधित करने से प्रदर्शन दंड हो सकता है। छोटे पुनरावृत्तियों के लिए यह नगण्य है, लेकिन विशाल लूप के लिए महत्वपूर्ण हो सकता है। StringBuilder वर्णों को जोड़कर, हटाकर, प्रतिस्थापित करके या सम्मिलित करके स्ट्रिंग को संशोधित करने का एक कुशल विकल्प प्रदान करता है।
StringBuilder वर्णों को रखने के लिए एक आंतरिक बफर रखता है। यदि बफर में जगह उपलब्ध है, तो यह नया डेटा जोड़ता है। अन्यथा, यह एक नया बफर बनाता है, पुराने डेटा को नए बफर में कॉपी करता है, और फिर डेटा जोड़ता है।
var sb = new StringBuilder(); for (int i = 0; i < 10; i++){ sb.Append("a"); } Console.WriteLine(sb.ToString()); // prints aaaaaaaaaaStringBuilder ऑब्जेक्ट बनाने के विभिन्न तरीके यहां दिए गए हैं।
// Initialize a new instance of StringBuilder var sb1 = new StringBuilder(); // Initialize a new instance of StringBuilder using the given capacity var sb2 = new StringBuilder(capacity: 10); // Initialize a new instance of StringBuilder with the given string var sb3 = new StringBuilder(value: "Hello World"); // Initialize a new instance of StringBuilder with the given capacity and the maximum capacity it can grow to var sb4 = new StringBuilder(capacity: 20, maxCapacity: 10); // Initialize a new instance of StringBuilder with the given string and capacity var sb5 = new StringBuilder(value: "Hello", capacity: 20); // Initialize a new instance of StringBuilder from the given substring and capacity var sb6 = new StringBuilder(value: "Hello World", startIndex: 0, length: 5, capacity: 20);
StringBuilder क्लास में एक Length प्रॉपर्टी होती है जो ऑब्जेक्ट में वर्तमान में मौजूद वर्णों की संख्या दर्शाती है। ऑब्जेक्ट में अधिक वर्ण जोड़ने पर, इसकी लंबाई बढ़ती है जब तक कि यह अपनी क्षमता तक नहीं पहुंच जाती, जो ऑब्जेक्ट द्वारा वर्तमान में समाहित किए जा सकने वाले वर्णों की अधिकतम संख्या को परिभाषित करती है।
यदि जोड़े गए वर्णों की संख्या के कारण लंबाई इसकी वर्तमान क्षमता से अधिक हो जाती है, तो क्लास नई मेमोरी आवंटित करती है, इसकी क्षमता को दोगुना करती है। फिर नए वर्ण ऑब्जेक्ट में जोड़े जाते हैं, और इसकी Length प्रॉपर्टी समायोजित की जाती है।
StringBuilder डायनामिक रूप से अतिरिक्त मेमोरी जोड़ता रहता है जब तक कि यह MaxCapacity प्रॉपर्टी के मान तक नहीं पहुंच जाता। उसके बाद, ऑब्जेक्ट के लिए कोई और मेमोरी आवंटित नहीं की जा सकती। यदि आप ऑब्जेक्ट में अधिक डेटा जोड़ने का प्रयास करते हैं, तो यह या तो ArgumentOutOfRangeException या OutOfMemoryException फेंकता है।
StringBuilder निम्नलिखित विधियां प्रदान करता है जो स्ट्रिंग्स को संशोधित करना आसान बनाती हैं।
Append − इस इंस्टेंस में एक निर्दिष्ट ऑब्जेक्ट के स्ट्रिंग प्रतिनिधित्व को जोड़ता है।
AppendFormat − एक कम्पोजिट फॉर्मेट स्ट्रिंग को प्रोसेस करके लौटाई गई स्ट्रिंग को जोड़ता है, जिसमें शून्य या अधिक फॉर्मेट आइटम होते हैं, इस इंस्टेंस में। प्रत्येक फॉर्मेट आइटम को एक संबंधित ऑब्जेक्ट आर्गुमेंट के स्ट्रिंग प्रतिनिधित्व द्वारा प्रतिस्थापित किया जाता है।
AppendJoin − ऑब्जेक्ट्स की प्रदान की गई सरणी में तत्वों के स्ट्रिंग प्रतिनिधित्व को जोड़ता है, प्रत्येक सदस्य के बीच निर्दिष्ट सेपरेटर का उपयोग करके, फिर परिणाम को स्ट्रिंग बिल्डर के वर्तमान इंस्टेंस में जोड़ता है।
AppendLine − वर्तमान StringBuilder ऑब्जेक्ट के अंत में डिफ़ॉल्ट लाइन टर्मिनेटर जोड़ता है।
Clear − वर्तमान StringBuilder इंस्टेंस से सभी वर्णों को हटाता है।
CopyTo − वर्णों को डेस्टिनेशन चार स्पैन या चार ऐरे में कॉपी करता है।
EnsureCapacity − सुनिश्चित करता है कि StringBuilder के इस इंस्टेंस की क्षमता कम से कम निर्दिष्ट मान है।
Equals − यदि इस इंस्टेंस और प्रदान किए गए इंस्टेंस में समान स्ट्रिंग, क्षमता, और MaxCapacity मान हैं तो true लौटाता है।
GetChunks − एक ऑब्जेक्ट लौटाता है जिसका उपयोग वर्णों के टुकड़ों के माध्यम से पुनरावृति के लिए किया जा सकता है।
Insert − एक निर्दिष्ट ऑब्जेक्ट के स्ट्रिंग प्रतिनिधित्व को इस इंस्टेंस में एक निर्दिष्ट वर्ण स्थिति पर सम्मिलित करता है।
Remove − इस इंस्टेंस से निर्दिष्ट रेंज के वर्णों को हटाता है।
Replace − इस इंस्टेंस में एक निर्दिष्ट वर्ण या स्ट्रिंग की सभी घटनाओं को किसी अन्य निर्दिष्ट वर्ण या स्ट्रिंग से प्रतिस्थापित करता है।
ToString − वर्तमान इंस्टेंस को स्ट्रिंग में परिवर्तित करता है।
उदाहरण
using System; using System.Text; class Program{ static void Main(string[] args){ string word = "aaabbbccc"; string newWord = word.Replace('b', 'd'); Console.WriteLine(word); // prints aaabbbccc Console.WriteLine(newWord); // prints aaadddccc var sb = new StringBuilder(); for (int i = 0; i < 10; i++){ sb.Append("a"); } Console.WriteLine(sb.ToString()); // prints aaaaaaaaaa // Initialize a new instance of StringBuilder var sb1 = new StringBuilder(); // Initialize a new instance of StringBuilder using the given capacity var sb2 = new StringBuilder(capacity: 10); // Initialize a new instance of StringBuilder with the given string var sb3 = new StringBuilder(value: "Hello World"); // Initialize a new instance of StringBuilder with the given capacity and the maximum capacity it can grow to var sb4 = new StringBuilder(capacity: 20, maxCapacity: 50); // Initialize a new instance of StringBuilder with the given string and capacity var sb5 = new StringBuilder(value: "Hello", capacity: 20); // Initialize a new instance of StringBuilder from the given substring and capacity var sb6 = new StringBuilder(value: "Hello World", startIndex: 0, length: 5, capacity: 20); } }आउटपुट
aaabbbccc aaadddccc aaaaaaaaaa