सी # में, तार अपरिवर्तनीय हैं। इसका मतलब है कि एक बार बनने के बाद आप एक स्ट्रिंग को संशोधित नहीं कर सकते। स्ट्रिंग में कोई भी संशोधन एक नया स्ट्रिंग देता है जिसमें संशोधन होता है, जिससे मूल स्ट्रिंग बरकरार रहती है।
स्ट्रिंग शब्द ="aaabbbccc";string newWord =word.Replace('b', 'd');Console.WriteLine(word); // aaabbbcccConsole.WriteLine (newWord) प्रिंट करता है; // aaadddccc प्रिंट करता है
स्ट्रिंगबिल्डर वर्ग एक स्ट्रिंग जैसी वस्तु का प्रतिनिधित्व करता है जिसे संशोधित किया जा सकता है, यानी वर्णों की एक परिवर्तनीय स्ट्रिंग। इसे स्ट्रिंग प्रकार से अलग तरीके से लागू किया गया है, जो वर्णों की एक अपरिवर्तनीय स्ट्रिंग का प्रतिनिधित्व करता है।
चूंकि एक स्ट्रिंग ऑब्जेक्ट को संशोधित करने से एक प्रतिलिपि बनती है, स्ट्रिंग ऑब्जेक्ट को बार-बार संशोधित करने से प्रदर्शन जुर्माना लग सकता है। छोटे दोहराव के लिए यह नगण्य है, लेकिन विशाल लूप के लिए महत्वपूर्ण हो सकता है। स्ट्रिंगबिल्डर वर्णों को जोड़कर, हटाकर, प्रतिस्थापित करके या सम्मिलित करके स्ट्रिंग को संशोधित करने के लिए एक कुशल विकल्प प्रदान करता है।
स्ट्रिंगबिल्डर पात्रों को पकड़ने के लिए एक आंतरिक बफर रखता है। यदि बफर में स्थान उपलब्ध है, तो यह नया डेटा जोड़ता है। अन्यथा, यह एक नया बफ़र बनाता है, पुराने डेटा को नए बफ़र में कॉपी करता है, और फिर डेटा को जोड़ता है।
var sb =new StringBuilder();for (int i =0; i <10; i++){ sb.Append("a");}Console.WriteLine(sb.ToString()); // प्रिंट आआआआआ
स्ट्रिंगबिल्डर ऑब्जेक्ट बनाने के विभिन्न तरीके यहां दिए गए हैं।
// StringBuildervar sb1 =new StringBuilder() का एक नया उदाहरण प्रारंभ करें;// दिए गए क्षमता का उपयोग करके StringBuilder का एक नया उदाहरण प्रारंभ करेंvar sb2 =new StringBuilder(क्षमता:10);// के साथ StringBuilder का एक नया उदाहरण प्रारंभ करें दिया गया स्ट्रिंगवर sb3 =नया स्ट्रिंगबिल्डर (मान:"हैलो वर्ल्ड"); // दी गई क्षमता के साथ स्ट्रिंगबिल्डर का एक नया उदाहरण शुरू करें और अधिकतम क्षमता जो इसे बढ़ा सकती है tovar sb4 =new StringBuilder (क्षमता:20, अधिकतम क्षमता:10);/ / दिए गए स्ट्रिंग और क्षमतावर sb5 =नए StringBuilder (मान:"हैलो", क्षमता:20) के साथ StringBuilder का एक नया उदाहरण प्रारंभ करें; // दिए गए सबस्ट्रिंग और क्षमता से StringBuilder का एक नया उदाहरण प्रारंभ करें sb6 =नया StringBuilder (मान:"हैलो वर्ल्ड", स्टार्टइंडेक्स:0, लंबाई:5, क्षमता:20);
StringBuilder वर्ग में एक लंबाई संपत्ति है जो वर्तमान में वस्तु के वर्णों की संख्या को दर्शाती है। ऑब्जेक्ट में अधिक वर्ण जोड़ने पर, इसकी लंबाई तब तक बढ़ जाती है जब तक कि यह अपनी क्षमता तक नहीं पहुंच जाता है, जो उस अधिकतम वर्णों को परिभाषित करता है जो ऑब्जेक्ट में वर्तमान में हो सकता है।
यदि जोड़े गए वर्णों की संख्या इसकी वर्तमान क्षमता से अधिक लंबाई का कारण बनती है, तो वर्ग अपनी क्षमता को जोड़कर नई मेमोरी आवंटित करता है। फिर ऑब्जेक्ट में नए वर्ण जोड़े जाते हैं, और इसकी लंबाई संपत्ति को समायोजित किया जाता है।
StringBuilder अतिरिक्त मेमोरी को गतिशील रूप से तब तक जोड़ता रहता है जब तक कि यह MaxCapacity संपत्ति के मूल्य तक नहीं पहुंच जाता। उसके बाद, ऑब्जेक्ट के लिए कोई और मेमोरी आवंटित नहीं की जा सकती है। यदि आप ऑब्जेक्ट में अधिक डेटा जोड़ने का प्रयास करते हैं, तो यह या तो ArgumentOutOfRangeException या OutOfMemoryException अपवाद फेंकता है।
स्ट्रिंगबिल्डर निम्नलिखित तरीके प्रदान करता है जो स्ट्रिंग्स को संशोधित करना आसान बनाता है।
-
जोड़ें - इस उदाहरण में निर्दिष्ट वस्तु के स्ट्रिंग प्रतिनिधित्व को जोड़ता है।
-
परिशिष्टफ़ॉर्मैट - इस उदाहरण के लिए शून्य या अधिक प्रारूप आइटम वाले समग्र प्रारूप स्ट्रिंग को संसाधित करके लौटाए गए स्ट्रिंग को जोड़ता है। प्रत्येक प्रारूप आइटम को संबंधित ऑब्जेक्ट तर्क के स्ट्रिंग प्रस्तुति द्वारा प्रतिस्थापित किया जाता है।
-
जोड़ें शामिल हों - प्रत्येक सदस्य के बीच निर्दिष्ट विभाजक का उपयोग करके, वस्तुओं की प्रदान की गई सरणी में तत्वों के स्ट्रिंग प्रतिनिधित्व को जोड़ता है, फिर परिणाम को स्ट्रिंग बिल्डर के वर्तमान उदाहरण में जोड़ता है।
-
परिशिष्ट पंक्ति - डिफ़ॉल्ट लाइन टर्मिनेटर को वर्तमान स्ट्रिंगबिल्डर ऑब्जेक्ट के अंत में जोड़ता है।
-
साफ़ करें - मौजूदा स्ट्रिंगबिल्डर इंस्टेंस से सभी वर्णों को हटा देता है।
-
प्रतिलिपि करें - वर्णों को गंतव्य चार स्पैन या चार सरणी में कॉपी करता है।
-
क्षमता सुनिश्चित करें - सुनिश्चित करता है कि स्ट्रिंगबिल्डर के इस उदाहरण की क्षमता कम से कम निर्दिष्ट मान है।
-
बराबर -यदि यह उदाहरण और प्रदान किए गए उदाहरण में समान स्ट्रिंग, क्षमता और अधिकतम क्षमता मान हैं, तो सही है।
-
गेटचंक्स - एक ऐसी वस्तु लौटाता है जिसका उपयोग वर्णों के टुकड़ों के माध्यम से पुनरावृति करने के लिए किया जा सकता है।
-
सम्मिलित करें - इस उदाहरण में निर्दिष्ट वर्ण स्थिति में निर्दिष्ट ऑब्जेक्ट के स्ट्रिंग प्रतिनिधित्व को सम्मिलित करता है।
-
निकालें - इस उदाहरण से वर्णों की निर्दिष्ट श्रेणी को हटा देता है।
-
बदलें - इस उदाहरण में निर्दिष्ट वर्ण या स्ट्रिंग की सभी घटनाओं को किसी अन्य निर्दिष्ट वर्ण या स्ट्रिंग से बदल देता है।
-
टूस्ट्रिंग - वर्तमान इंस्टेंस को एक स्ट्रिंग में कनवर्ट करता है।
उदाहरण
सिस्टम का उपयोग करना; सिस्टम का उपयोग करना। स्ट्रिंग न्यूवर्ड =शब्द। बदलें ('बी', 'डी'); कंसोल। राइटलाइन (शब्द); // aaabbbccc कंसोल प्रिंट करता है। राइटलाइन (newWord); // प्रिंट aaadddccc var sb =new StringBuilder (); के लिए (int i =0; i <10; i++){ sb.Append("a"); } कंसोल.WriteLine(sb.ToString ()); // प्रिंट aaaaaaaaa // StringBuilder var sb1 =new StringBuilder () का एक नया उदाहरण प्रारंभ करें; // दी गई क्षमता var sb2 =new StringBuilder (क्षमता:10) का उपयोग करके StringBuilder का एक नया उदाहरण प्रारंभ करें; // दिए गए स्ट्रिंग के साथ StringBuilder का एक नया उदाहरण प्रारंभ करें var sb3 =new StringBuilder (मान:"हैलो वर्ल्ड"); // दी गई क्षमता के साथ स्ट्रिंगबिल्डर का एक नया उदाहरण शुरू करें और अधिकतम क्षमता जो इसे var sb4 =new StringBuilder (क्षमता:20, अधिकतम क्षमता:50) तक बढ़ा सकती है; // दिए गए स्ट्रिंग और क्षमता के साथ StringBuilder का एक नया उदाहरण प्रारंभ करें var sb5 =new StringBuilder (मान:"हैलो", क्षमता:20); // दिए गए सबस्ट्रिंग और क्षमता var sb6 =new StringBuilder से StringBuilder का एक नया उदाहरण प्रारंभ करें (मान:"हैलो वर्ल्ड", startIndex:0, लंबाई:5, क्षमता:20); }}
आउटपुट
aaabbbcccaaadddcccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)