StringBuilder Extensions






4.68/5 (25 votes)
Here are the extensions for
StringBuilder
that I created to make it work like a string
. I have them for years now and finally put in some time to post them here.
Phi Nguyen
public static string Substring(this StringBuilder sb, int startIndex, int length) { return sb.ToString(startIndex, length); } public static StringBuilder Remove(this StringBuilder sb, char ch) { for (int i = 0; i < sb.Length; ) { if (sb[i] == ch) sb.Remove(i, 1); else i++; } return sb; } public static StringBuilder RemoveFromEnd(this StringBuilder sb, int num) { return sb.Remove(sb.Length - num, num); } public static void Clear(this StringBuilder sb) { sb.Length = 0; } /// <summary> /// Trim left spaces of string /// </summary> /// <param name="sb"></param> /// <returns></returns> public static StringBuilder LTrim(this StringBuilder sb) { if (sb.Length != 0) { int length = 0; int num2 = sb.Length; while ((sb[length] == ' ') && (length < num2)) { length++; } if (length > 0) { sb.Remove(0, length); } } return sb; } /// <summary> /// Trim right spaces of string /// </summary> /// <param name="sb"></param> /// <returns></returns> public static StringBuilder RTrim(this StringBuilder sb) { if (sb.Length != 0) { int length = sb.Length; int num2 = length - 1; while ((sb[num2] == ' ') && (num2 > -1)) { num2--; } if (num2 < (length - 1)) { sb.Remove(num2 + 1, (length - num2) - 1); } } return sb; } /// <summary> /// Trim spaces around string /// </summary> /// <param name="sb"></param> /// <returns></returns> public static StringBuilder Trim(this StringBuilder sb) { if (sb.Length != 0) { int length = 0; int num2 = sb.Length; while ((sb[length] == ' ') && (length < num2)) { length++; } if (length > 0) { sb.Remove(0, length); num2 = sb.Length; } length = num2 - 1; while ((sb[length] == ' ') && (length > -1)) { length--; } if (length < (num2 - 1)) { sb.Remove(length + 1, (num2 - length) - 1); } } return sb; } /// <summary> /// Get index of a char /// </summary> /// <param name="sb"></param> /// <param name="c"></param> /// <returns></returns> public static int IndexOf(this StringBuilder sb, char value) { return IndexOf(sb, value, 0); } /// <summary> /// Get index of a char starting from a given index /// </summary> /// <param name="sb"></param> /// <param name="c"></param> /// <param name="startIndex"></param> /// <returns></returns> public static int IndexOf(this StringBuilder sb, char value, int startIndex) { for (int i = startIndex; i < sb.Length; i++) { if (sb[i] == value) { return i; } } return -1; } /// <summary> /// Get index of a string /// </summary> /// <param name="sb"></param> /// <param name="text"></param> /// <returns></returns> public static int IndexOf(this StringBuilder sb, string value) { return IndexOf(sb, value, 0, false); } /// <summary> /// Get index of a string from a given index /// </summary> /// <param name="sb"></param> /// <param name="text"></param> /// <param name="startIndex"></param> /// <returns></returns> public static int IndexOf(this StringBuilder sb, string value, int startIndex) { return IndexOf(sb, value, startIndex, false); } /// <summary> /// Get index of a string with case option /// </summary> /// <param name="sb"></param> /// <param name="text"></param> /// <param name="ignoreCase"></param> /// <returns></returns> public static int IndexOf(this StringBuilder sb, string value, bool ignoreCase) { return IndexOf(sb, value, 0, ignoreCase); } /// <summary> /// Get index of a string from a given index with case option /// </summary> /// <param name="sb"></param> /// <param name="text"></param> /// <param name="startIndex"></param> /// <param name="ignoreCase"></param> /// <returns></returns> public static int IndexOf(this StringBuilder sb, string value, int startIndex, bool ignoreCase) { int num3; int length = value.Length; int num2 = (sb.Length - length) + 1; if (ignoreCase == false) { for (int i = startIndex; i < num2; i++) { if (sb[i] == value[0]) { num3 = 1; while ((num3 < length) && (sb[i + num3] == value[num3])) { num3++; } if (num3 == length) { return i; } } } } else { for (int j = startIndex; j < num2; j++) { if (char.ToLower(sb[j]) == char.ToLower(value[0])) { num3 = 1; while ((num3 < length) && (char.ToLower(sb[j + num3]) == char.ToLower(value[num3]))) { num3++; } if (num3 == length) { return j; } } } } return -1; } /// <summary> /// Determine whether a string starts with a given text /// </summary> /// <param name="sb"></param> /// <param name="value"></param> /// <returns></returns> public static bool StartsWith(this StringBuilder sb, string value) { return StartsWith(sb, value, 0, false); } /// <summary> /// Determine whether a string starts with a given text (with case option) /// </summary> /// <param name="sb"></param> /// <param name="value"></param> /// <param name="ignoreCase"></param> /// <returns></returns> public static bool StartsWith(this StringBuilder sb, string value, bool ignoreCase) { return StartsWith(sb, value, 0, ignoreCase); } /// <summary> /// Determine whether a string is begin with a given text /// </summary> /// <param name="sb"></param> /// <param name="value"></param> /// <param name="startIndex"></param> /// <param name="ignoreCase"></param> /// <returns></returns> public static bool StartsWith(this StringBuilder sb, string value, int startIndex, bool ignoreCase) { int length = value.Length; int num2 = startIndex + length; if (ignoreCase == false) { for (int i = startIndex; i < num2; i++) { if (sb[i] != value[i - startIndex]) { return false; } } } else { for (int j = startIndex; j < num2; j++) { if (char.ToLower(sb[j]) != char.ToLower(value[j - startIndex])) { return false; } } } return true; }