کلاس StringBuilder در سی شارپ #C — بررسی ۵ متد با مثال های کاربردی

تصویر شاخص کلاس StringBuilder در سی شارپ

در این مقاله از سری مقالات آموزشی پی استور به بررسی کلاس 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، ابتدا باید آن را به صورت زیر در کد خود تعریف کنید و مقداردهی اولیه انجام دهید:

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 چیست و چرا باید از آن استفاده کنیم؟

StringBuilder یک کلاس در سی شارپ است که برای مدیریت رشته‌ها به‌صورت پویا و کارآمد طراحی شده است. استفاده از StringBuilder برای تغییرات مکرر در رشته‌ها بهتر از استفاده از String معمولی است، زیرا عملکرد بهتری در استفاده از حافظه و زمان دارد.

تفاوت بین String و StringBuilder در C# چیست؟

String یک نوع داده غیرقابل تغییر «immutable» است که تغییرات روی آن موجب ایجاد اشیاء جدید می‌شود، در حالی که StringBuilder شیء قابل تغییر است و تغییرات روی آن مستقیماً در حافظه شیء اصلی اعمال می‌شود.

چگونه می‌توان با استفاده از StringBuilder رشته‌ها را به فرمت خاصی تبدیل کرد؟

با استفاده از متد ()AppendFormat می‌توانید رشته‌ها را به فرمت‌های مختلف مانند عدد، تاریخ و زمان یا حتی مقادیر ارز قالب‌بندی کرده و سپس به رشته اصلی اضافه کنید.

آیا می‌توان از StringBuilder برای ذخیره انواع مختلف داده‌ها استفاده کرد؟

بله، شما می‌توانید انواع مختلف داده‌ها مانند اعداد، رشته‌ها، و حتی اشیاء را با استفاده از متدهایی مانند Append() به StringBuilder اضافه کنید.

چه زمانی باید از StringBuilder استفاده کنم؟

استفاده از StringBuilder زمانی توصیه می‌شود که نیاز به تغییرات مکرر در رشته‌ها داشته باشید، به‌ویژه در حلقه‌ها یا در برنامه‌هایی که تعداد زیادی از رشته‌ها باید با هم ترکیب شوند.

میزان رضایتمندی
لطفاً میزان رضایت خودتان را از این مطلب با دادن امتیاز اعلام کنید.
[ امتیاز میانگین 5 از 4 نفر ]
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع و مراجع:
c-sharpcorner geeksforgeeks مجله پی استور

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

1 دیدگاه دربارهٔ «کلاس StringBuilder در سی شارپ #C — بررسی ۵ متد با مثال های کاربردی»



برچسب‌ها:
سی شارپ


پیمایش به بالا