StringBuilder ב-C# הוא טייפ אשר בא לפתור לנו בעיות זיכרון בעת ביצוע מניפולציות על מחרוזות, במאמר זה נעבור על אופרציות C.R.U.D שניתן לבצע על StringBuilder
מחרוזות בשפת C# הן immutable type כלומר שמרגע שיצרנו אותן הן לא ניתנות לשינוי.
למשל, אם ניצור את המחרוזת (string) – "g4a.co.il" יישמר עבורה מקום ב-Heap.
*יש לזכור כי מאחורי הקלעים, מחרוזת היא למעשה מערך של אותיות (char)
כלומר שאם נרצה למשל לשנות את המחרוזת ל – "Hello g4a.co.il" מה שיקרה מאחורי הקלעים זה שתיווצר מחרוזת חדשה במיקום זיכרון חדש.
כאשר מדובר בתוכנית גדולה ומסועפת אשר אנו מבצעים בה מגוון של מניפולציות על מחרוזות שוב שוב,
התנהלות זו יכולה להוריד את רמת הביצועים של התוכנית.
על מנת לפתור בעיה זו, בשפת C# קיים טייפ בשם – StringBuilder.
ההתנהלות של טייפ זה מאחורי הקלעים היא שונה – כאשר אנו משנים את המחרוזת, לא נוצר מיקום זיכרון חדש עבורה.
והזיכרון המוקצה לאובייקט מתרחב באופן דינאמי כאשר אנו מבצעים מניפולציות על המחרוזת.
אופרציות C.R.U.D על StringBuilder
C.R.U.D הם ראשי תיבות של Create, Read, Update Delete.
כעת נדגים את אופרציות ה-C.R.U.D שניתן לבצע על טייפ זה.
Create – יצירת אובייקט StringBuilder
לשם תחילת העבודה נשתמש ב-System.Text:
using System.Text;
על מנת ליצור מופע חדש של StringBuilder נשתמש במילה השמורה – new,
נוכל כבר בעת יצירת המופע לתת את המחרוזת כפרמטר לבנאי:
StringBuilder builder = new("g4a.co.il");
שימו לב כי הקצאת הזיכרון עבור המופע עובדת לפי עקרון פעולה כזה שמקסימום האותיות האפשרי אשר מוקצה למופע הוא 50, אם הגענו למקסימום זה הוא יוכפל.
כמו כן נוכל להצהיר מראש מה יהיה אורך המופע:
StringBuilder builder = new("Hello g4a.co.il",50);
*על מנת לקבל מידע על האורך של המופע נוכל להשתמש ב-Length או Capacity
Read – קריאת המחרוזת מתוך מופע ה-StringBuilder
על מנת שנוכל לקבל את המחרוזת מתוך מופע ה-StringBuilder נוכל להשתמש במתודה ToString:
var g4a = builder .ToString();"
Update – שינוי\הוספת מחרוזות למופע ה-StringBuilder
- על מנת להוסיף מילים למחרוזת אשר מחזיק ה-StringBuilder נוכל להשתמש במתודה Append:
StringBuilder builder = new(); builder .Append("Hello "); builder .Append("g4a.co.il"); Console.WriteLine(builder );
*באמצעות Append, גם אם בשלב זה המחרוזת הייתה ריקה היינו יכולים להוסיף מילים
- ב-AppendLine נוכל להשתמש על מנת להוסיף סימן הורדת שורה בסוף המחרוזת שאותה אנו מוסיפים למופע:
StringBuilder builder = new(); builder .Append("Hello "); builder .AppendLine("g4a.co.il"); sbuilder .AppendLine("Hello, World!"); Console.WriteLine(builder );
- במתודה AppendFormat נוכל להשתמש על מנת להוסיף ערך שאינו ידוע מראש למשל:
int number = 100; StringBuilder amount = new("amount is: "); amount.AppendFormat("{0}", number); Console.WriteLine(amount);
- במתודה Insert נוכל להשתמש על מנת להכניס מחרוזת במיקום ספציפי.
הפרמטרים שנשלח למתודה הם האינדקס הרצוי והמחרוזת:
StringBuilder builder = new("Hello g4a.co.il\n"); builder.Insert(builder.Length, "Hello, World!"); Console.WriteLine(builder);
כלומר שאם נכתוב את התוכנית שלנו כך:
using System.Text; StringBuilder builder = new(); builder.Append("Hello "); builder.AppendLine("g4a.co.il"); builder.Insert(builder.Length, "Hello, World!"); Console.WriteLine(builder);
נוכל לקבל את הפלט הבא:
- על מנת שנוכל להחליף\לשנות דברים במופע נוכל להשתמש במתודה Replace.
הפרמטרים שנשלח הם המחרוזת שברצוננו להחליף והערך החדש:
StringBuilder builder = new("Hello World!"); builder.Replace("World!", "g4a.co.il"); Console.WriteLine(builder);
Delete – הסרת מחרוזת מהמופע
נוכל להשתמש ב-Remove כדי להסיר מחרוזת מהמופע.
הפרמטרים שנשלח הם האינדקס הרצוי וכמות האינדקסים שברצוננו למחוק ממנו והלאה.
בדוגמא הבאה נסיר את המילה "Hello":
StringBuilder builder = new("Hello g4a.co.il", 50); builder.Remove(0,6); Console.WriteLine(builder);
וכשנריץ קטע קוד זה נקבל את הפלט הבא:
לקריאה מורחבת באתר של מייקרוסופט יש ללחוץ כאן