اینجا میتونی برنامه نویسی ویندوز رو به طور کاملا رایگان یاد بگیری
2 سال پیش / خواندن دقیقه

StringBuilder در سی شارپ

یک رشته تغییر ناپذیر است و این به این معناست که بعد از آنکه رشته ای ایجاد شد نمی‌توان آن را در حافظه تغییر داد. با استفاده از کلاس StringBuilder میتوان رشته های پویایی ایجاد کرد که قابل تغییر هستند. در این فصل با کلاس StringBuilder آشنا خواهیم شد.

StringBuilder

یک رشته تغییر ناپذیر است و این به این معناست که بعد از آنکه رشته ای ایجاد شد نمی‌توان آن را تغییر داد. برای مثال رشته ی جدید "!!Hello World" فضایی را در حافظه در قسمت heap اشغال می کنند. اکنون با تغییر رشته اولیه "!!Hello World" به "Hello World!! from Tutorials Teacher" به جای تغییر  و ویرایش آن رشته در همان آدرس از حافظه ، رشته جدیدی در قسمت heap از حافظه ایجاد میشود. این رفتار باعث می شود در مواقعی که ویرایش ، جایگزینی و حذف رشته ها به صورت مکرر انجام می‌شود از کارایی سیستم کاسته شود.

شکل زیر تخصیص حافظه را برای رشته ها نشان می دهد :


StringBuilder در سی شارپ

برای حل این مشکل زبان برنامه نویسی سی شارپ کلاس StringBuilder را معرفی کرده است. StringBuilder یک شی پویاست که به شما اجازه می دهد تعداد کاراکترهای یک رشته را افزایش دهید. این کلاس با تغییر رشته مورد نظر رشته جدیدی را در حافظه ایجاد نمی کند بلکه به صورت پویا حافظه را برای افزایش کاراکتر های رشته گسترش می دهد.

در شکل زیر نحوه تخصیص حافظه هنگام استفاده از کلاس StringBuilder نشان داده شده است :


StringBuilder در سی شارپ

مقدار دهی اولیه

StringBuilder را می توان همانند کلاس ها مقدار دهی اولیه کرد :

StringBuilder sb = new StringBuilder();            //or

StringBuilder sb = new StringBuilder("Hello World!!");

در هنگام تعریف یک StringBuilder می توان ظرفیت تعداد کاراکترهای آن را با مشخص کردن عددی در سازنده آن مشخص کرد. برای مثال در نمونه کد آورده شده در زیر ظرفیت StringBuilder در حافظه برابر با ۵۰ کارکتر مشخص شده است. در این صورت تخصیص حافظه به صورت خودکار تا رسیدن به ظرفیت مشخص شده انجام خواهد شد :

StringBuilder sb = new StringBuilder(50);

//or

StringBuilder sb = new StringBuilder("Hello World!!",50);

 

متدهای مهم کلاس StringBuilder

(StringBuilder.Append(valueToAppend : این متد مقدار رشته ای را که به عنوان آرگومان می پذیرد به انتهای رشته StringBuilder اضافه می کنند
()StringBuilder.AppendFormat : این متد مقدار رشته ای را که به عنوان آرگومان می پذیرد با الگوی مشخص شده فرمت بندی می کنند
(StringBuilder.Insert(index, valueToAppend : این متد رشته ای را در مکان مشخص شده از رشته StringBuilder قرار می‌دهد
(StringBuilder.Remove(int startIndex, int length : این متد تعداد مشخصی از کاراکترها را از مکانی مشخص از رشته StringBuilder حذف می کند
(StringBuilder.Replace(oldValue, newValue : این متد کاراکترهای را مشخص شده را با کاراکتر های جدید جایگزین می کند.

متد ()Append()/AppendLine

از متد Append کلاس StringBuilder برای افزودن یا الحاق یک رشته به StringBuilder استفاده می شود. متد ()AppendLine رشته ای را با یک خط جدید به انتهای رشته StringBuilder  می افزاید.

StringBuilder sb = new StringBuilder("Hello ",50);
 sb.Append("World!!");
sb.AppendLine("Hello C#!");
sb.AppendLine("This is new line.");
 Console.WriteLine(sb);

خروجی :

Hello World!! Hello C#!. This is new line.

نکته : در هنگام الحاق چندین رشته به هم دیگر StringBuilder سریع‌تر از string عمل می‌کند. از StringBuilder برای الحاق بیشتر از سه یا چهار رشته به همدیگر استفاده کنید برای الحاق دو یا سه رشته ، string کارایی بیشتری نسبت به StringBuilder دارد.

 

متد ()AppendFormat

از متد ()AppendFormat برای فرمت بندی رشته ارسالی و الحاق آن استفاده کنید :

StringBuilder amountMsg = new StringBuilder("Your total amount is ");
amountMsg.AppendFormat("{0:C} ", 25);
 Console.WriteLine(amountMsg);

خروجی :

Your total amount is $ 25.00

متد ()Insert

از متد ()Insert برای درج یک رشته در یک مکان مشخص از StringBuilder استفاده کنید :

StringBuilder sb = new StringBuilder("Hello World!!",50);
sb.Insert(5," C#");
 Console.WriteLine(sb);

خروجی :

Hello C# World!!

متد ()Remove

از متد ()Remove برای حذف رشته از یک مکان مشخص از StringBuilder می توان استفاده کرد

StringBuilder sb = new StringBuilder("Hello World!!",50);
sb.Remove(6, 7);
 Console.WriteLine(sb);

خروجی :

Hello

متد ()Replace

از متد ()Replace می توان برای جایگزینی قسمتی از یک رشته StringBuilder استفاده کرد :

StringBuilder sb = new StringBuilder("Hello World!!",50);
sb.Replace("World", "C#");
 Console.WriteLine(sb);

خروجی :

Hello C#!!

استفاده از شاخص ها (Indexer)

می ‌توان از یک شاخص برای به دست آوردن و تنظیم کردن یک کاراکتر در یک مکان مشخص استفاده کرد.در نمونه مثال زیر با استفاده از شاخص و حلقه for تمام کاراکترهای یک رشته بر روی خروجی چاپ می شود.

StringBuilder sb = new StringBuilder("Hello World!!");

for(int i=0; i< sb.Length; i++)        Console.Write(sb[i]);

خروجی :

Hello World!!

متد  ()ToString

از متد ()ToString برای بدست آوردن رشته یک StringBuilder می توان استفاده کرد :

StringBuilder sb = new StringBuilder("Hello World!!");

string str = sb.ToString(); // "Hello World!!"

 

به خاطر داشته باشید که :

  • رشته ای که توسط StringBuilder مشخص میشود، تغییر پذیر است 
  • StringBuilder در هنگامی که می‌خواهید چندین رشته را به هم الحاق کنید سریعتر از یک string است.
  • یک StringBuilder را می توان همانند یک کلاس مقداردهی اولیه کرد. 
  • از متد ()Append برای افزودن و یا الحاق رشته ها در یک StringBuilder استفاده کنید
  • از متد ()ToString برای به دست آوردن رشته StringBuilder استفاده کنید 



شاید از نوشته‌های زیر خوشتان بیاید
نظر خود را درباره این پست بنویسید ...

منوی سریع