Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

StringBuilder Extensions

0.00/5 (No votes)
23 Nov 2010 1  
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;
}

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here