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 − ক্যারেক্টারগুলো একটি ডেস্টিনেশন char span বা char অ্যারেতে কপি করে।
EnsureCapacity − নিশ্চিত করে যে এই StringBuilder ইনস্ট্যান্সের ক্যাপাসিটি কমপক্ষে নির্দিষ্ট মান আছে।
Equals − যদি এই ইনস্ট্যান্স এবং প্রদত্ত ইনস্ট্যান্সে সমান স্ট্রিং, Capacity, এবং 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