در این مقاله از سری مقالات آموزشی پی استور به بررسی کلاس StringBuilder در سی شارپ #C میپردازیم. این کلاس یکی از ابزارهای مهم برای مدیریت رشتهها «String» در #C است که به دلیل ویژگیهای خاص خود، کارایی بیشتری نسبت به رشتههای معمولی دارد. با استفاده از StringBuilder میتوان رشتهها را بهصورت بهینه و بدون ایجاد اشیاء اضافی تغییر داد، که این امر در برنامههای با بار پردازشی زیاد و تغییرات مکرر در رشتهها مفید است. در این مقاله، روشهای مختلفی مانند افزودن«Add»، درج «Insert»، حذف «Delet»، جایگزینی «Replac» و قالببندی «Format» رشتهها در StringBuilder را بررسی خواهیم کرد و مثالهایی برای هر کدام از این متدها ارائه خواهیم داد.
می توانید مقالههای قبلی ما در مورد رشتهها را با عنوان رشتهها در سیشارپ و رشتههای کلمه به کلمه در سیشارپ مطالعه کنید.
مقدمه
در زبان برنامه نویسی سی شارپ #C، نوع داده string غیرقابل تغییر است. این بدین معناست که یک رشته پس از ایجاد نمیتواند تغییر یابد. برای مثال، یک رشته جدید به نام !Hello World فضای حافظهای را در هیپ اشغال میکند. حالا با تغییر رشته اولیه !Hello World به Hello World! from Tutorials Teacher، یک شیء رشته جدید در فضای حافظه ایجاد میشود و به جای تغییر رشته اصلی در همان آدرس حافظه، یک رشته جدید ساخته میشود. این رفتار میتواند عملکرد برنامه را مختل کند، مخصوصاً اگر رشته اصلی بارها تغییر کند، مثل جایگزینی، الحاق، حذف یا درج رشتههای جدید در رشته اصلی.
StringBuilder یک شیء پویا است. این شیء به جای ایجاد یک شیء جدید در حافظه، به صورت پویا حافظه لازم را گسترش میدهد تا رشته تغییر داده شده یا جدید را در خود جای دهد.
یک شیء از نوع String غیرقابل تغییر «immutable» است، به این معنی که پس از ایجاد، نمیتوان آن را تغییر داد.
برای جلوگیری از عملیاتهایی مانند جایگزینی، افزودن، حذف یا درج رشتههای جدید در رشته اصلی، زبان #C مفهوم StringBuilder را معرفی کرده است.
تعریف و مقداردهی اولیه StringBuilder
برای استفاده از StringBuilder، ابتدا باید آن را به صورت زیر در کد خود تعریف کنید و مقداردهی اولیه انجام دهید:
StringBuilder s = new StringBuilder(); or StringBuilder s = new StringBuilder("ProgramStore");
در مثال بالا، “s” بهعنوان یک شیء از کلاس StringBuilder عمل میکند. همچنین میتوان یک مقدار رشتهای (مانند ProgramStore) را بهعنوان آرگومان به سازنده (constructor) StringBuilder ارسال کرد.
تعریف ظرفیت در StringBuilder
اگرچه StringBuilder یک شیء پویا است که به شما امکان میدهد تعداد کاراکترهای موجود در رشته را افزایش دهید، میتوانید مقداری را برای حداکثر تعداد کاراکترهایی که میتواند نگهداری کند، تعیین کنید. این مقدار بهعنوان ظرفیت «Capacity» شیء StringBuilder شناخته میشود.
StringBuilder s = new StringBuilder(20); or StringBuilder s = new StringBuilder("ProgramStore", 20);
در اولین دستور، یک مقدار عدد صحیح بهعنوان آرگومان به سازنده ارسال میشود. این مقدار نشاندهنده حداکثر تعداد کاراکترهایی است که رشته میتواند نگهداری کند.
در دستور دوم، یک مقدار رشتهای به همراه یک مقدار عدد صحیح (که نشاندهنده ظرفیت حداکثری کاراکترهاست) به سازنده ارسال میشود.
متدهای کلاس StringBuilder در سی شارپ
کلاس StringBuilder در NET. چندین متد برای عملیات روی رشتهها ارائه میدهد. در ادامه این متدها را معرفی میکنیم.
متد با نحو | توضیحات |
StringBuilder.Append(string value) | متد ()Append برای اضافه کردن یا الحاق یک مقدار رشتهای یا مقدار یک شیء به انتهای رشتهای که توسط شیء فعلی StringBuilder نشان داده شده است، استفاده میشود. |
()StringBuilder.AppendFormat | این متد برای قالببندی رشته ورودی به فرمت مشخص شده و سپس افزودن آن استفاده میشود. |
StringBuilder.Insert(int index, string value) | این متد رشته را در یک ایندکس مشخص در شیء StringBuilder درج میکند. |
StringBuilder.Remove(int start, int length) | این متد تعداد مشخصی از کاراکترها را از شیء فعلی StringBuilder حذف میکند. |
StringBuilder.Replace(old_val, new_val) | این متد برای جایگزینی کاراکترها در داخل شیء StringBuilder با یک کاراکتر مشخص دیگر استفاده میشود. |
مثال برای افزودن مقدار رشتهای به StringBuilder در سی شارپ
کلاس StringBuilder در فضای نام System.Text تعریف شده است. شما باید این فضای نام را یا در کلاس خود وارد کنید یا آن را به طور مستقیم در هنگام ایجاد شیء فراخوانی کنید.
قطعه کد زیر به زبان #C است و از کلاس StringBuilder برای کار با رشتهها استفاده میکند.
// Adding element in StringBuilder Object using System; using System.Text; class PStore { // Main Method public static void Main() { // "۲۰" is capacity StringBuilder s = new StringBuilder("HELLO ", 20); s.Append("Program"); // after printing "Store" // a new line append s.AppendLine("Store"); s.Append("ProgramStore"); Console.WriteLine(s); } }
خروجی
HELLO ProgramStore ProgramStore
مثال قالببندی رشته ورودی به فرمت مشخص شده در سی شارپ
قطعه کد زیر به زبان C# نوشته شده و از کلاس StringBuilder برای ایجاد و فرمتدهی به یک رشته استفاده میکند.
// Adding the Formatted String in // StringBuilder Object using System; using System.Text; class PStore { // Main Method public static void Main() { StringBuilder s = new StringBuilder("Your total amount is "); // using the method s.AppendFormat("{0:C} ", 50); Console.WriteLine(s); } }
خروجی
Your total amount is $50.00
توضیح: در مثال بالا از متد AppendFormat استفاده میشود که به شما امکان میدهد یک رشته با فرمت خاص به شیء StringBuilder اضافه کنید. فرمت {۰:C} نشاندهنده یک مقدار عددی است که به صورت پولی (currency) فرمت میشود. مقدار ۵۰ به این فرمت اضافه میشود، بنابراین عدد ۵۰ به صورت پولی (مانند $۵۰.۰۰ یا معادل آن بسته به تنظیمات منطقهای سیستم) در رشته درج خواهد شد.
کد بالا نشان میدهد که چطور میتوان با استفاده از StringBuilder و متد AppendFormat، مقادیر را به راحتی فرمت کرده و به یک رشته اضافه کرد.
مثال درج رشته در ایندکس مشخص شیء StringBuilder در سی شارپ
قطعه کد زیر به زبان #C نوشته شده و از کلاس StringBuilder برای درج یک رشته در موقعیت خاص استفاده میکند.
// Inserting String at specified index // position/index in StringBuilder using System; using System.Text; class PStore { // Main Method public static void Main() { // "۲۰" is capacity StringBuilder s = new StringBuilder("HELLO ", 20); // "Pstore" insert after 6th index s.Insert(6, "PStore"); Console.WriteLine(s); } }
خروجی در مثال بالا از متد Insert استفاده میشود تا رشته PStore در موقعیت ۶ام (شاخص) در رشته اصلی (HELLO) درج شود. شاخصها در #C از ۰ شروع میشوند، بنابراین در اینجا PStore بعد از کلمه HELLO و در موقعیت ۶ درج میشود، که خروجی به شکل زیر خواهد بود:
HELLO PStore
توضیح: کد بالا نشان میدهد که چگونه میتوان با استفاده از متد Insert در StringBuilder، رشتهای را در موقعیت خاصی از یک رشته موجود درج کرد.
مثال حذف تعداد مشخصی از کاراکترها از شیء StringBuilder در سی شارپ
قطعه کد زیر به زبان #C نوشته شده و از کلاس StringBuilder برای حذف بخشهایی از یک رشته در موقعیت خاص استفاده میکند.
// Removing elements from particular // indexes in StringBuilder Object using System; using System.Text; class PStore { // Main Method public static void Main() { // "۲۰" is capacity StringBuilder s = new StringBuilder("ProgramandStore", 20); // remove starts from index 5 // and remove happes 3 index // after index 5 s.Remove(7, 3); Console.WriteLine(s); } }
خروجی: در مثال بالا از متد Remove استفاده میشود که به شما این امکان را میدهد که بخشی از رشته را حذف کنید. این متد دو پارامتر میگیرد:
- اولین پارامتر (۷) شاخص شروع حذف است. این یعنی حذف از موقعیت ۷ام رشته آغاز میشود (شاخصها از ۰ شروع میشوند).
- پارامتر دوم (۳) تعداد کاراکترهایی است که باید از رشته حذف شوند.
بنابراین، از رشته ProgramandStore از شاخص ۷ به بعد، ۳ کاراکتر حذف میشود. در این مورد، ۳ کاراکتر از کلمه and حذف میشود و خروجی به صورت زیر خواهد بود:
ProgramStore
کد بالا نشان میدهد که چگونه میتوان با استفاده از متد Remove از StringBuilder، بخشی از رشته را در موقعیت خاصی حذف کرد.
مثال جایگزینی کاراکترها داخل شیء StringBuilder در سی شارپ
قطعه کد زیر که به زبان #C نوشته شده و از کلاس StringBuilder برای جایگزینی بخشهایی از یک رشته استفاده میکند.
// Replace Elements in StringBuilder Object using System; using System.Text; class PStore { // Main Method public static void Main() { // "۲۰" is capacity StringBuilder s = new StringBuilder("Prm Store ", 20); // Replace "Prm" with "Program" s.Replace("Prm", "Program "); Console.WriteLine(s); } }
خروجی: در مثال بالا از متد Replace برای جایگزینی بخشهایی از رشته استفاده میشود. متد Replace دو پارامتر میگیرد:
- پارامتر اول (Prm) رشتهای است که باید جایگزین شود.
- پارامتر دوم (Program) رشتهای است که باید به جای پارامتر اول قرار گیرد.
بنابراین، هر جا که Prm در رشته پیدا شود، با Program جایگزین میشود. در این مورد، Prm به Program تبدیل میشود، و خروجی به صورت زیر خواهد بود:
Program Store
کد بالا نشان میدهد که چگونه میتوان با استفاده از متد Replace در StringBuilder، بخشهایی از یک رشته را با رشتهای دیگر جایگزین کرد.
نتیجهگیری
در نتیجه، کلاس StringBuilder در سی شارپ ابزاری قدرتمند و کارآمد برای مدیریت و تغییر رشتهها بهصورت پویا است. با استفاده از متدهایی مانند Append، Insert، Remove، Replace و AppendFormat، برنامهنویسان میتوانند عملیات مختلفی را بر روی رشتهها بدون ایجاد اشیاء اضافی انجام دهند که این امر باعث افزایش کارایی و کاهش مصرف حافظه میشود. بهویژه در برنامههایی که نیاز به تغییرات مکرر در رشتهها دارند، استفاده از StringBuilder میتواند تأثیر زیادی در بهبود عملکرد داشته باشد. بنابراین، آشنایی با روشها و کاربردهای این کلاس برای هر برنامهنویس #C ضروری است.
مقاله مفیدی بود، توضیحات درباره StringBuilder و بهینهسازی حافظه خیلی مفید بود.