Why doesn't StringBuilder have IndexOf method?

前端 未结 4 1153
感动是毒
感动是毒 2020-12-10 11:14

I understand that I can call ToString().IndexOf(...), but I don\'t want to create an extra string. I understand that I can write a search routine manually. I just wonder why

4条回答
  •  無奈伤痛
    2020-12-10 11:43

    I know this is an old question, however I have written a extension method that performs an IndexOf on a StringBuilder. It is below. I hope it helps anyone that finds this question, either from a Google search or searching StackOverflow.

    /// 
    /// Returns the index of the start of the contents in a StringBuilder
    ///         
    /// The string to find
    /// The starting index.
    /// if set to true it will ignore case
    /// 
    public static int IndexOf(this StringBuilder sb, string value, int startIndex, bool ignoreCase)
    {            
        int index;
        int length = value.Length;
        int maxSearchLength = (sb.Length - length) + 1;
    
        if (ignoreCase)
        {
            for (int i = startIndex; i < maxSearchLength; ++i)
            {
                if (Char.ToLower(sb[i]) == Char.ToLower(value[0]))
                {
                    index = 1;
                    while ((index < length) && (Char.ToLower(sb[i + index]) == Char.ToLower(value[index])))
                        ++index;
    
                    if (index == length)
                        return i;
                }
            }
    
            return -1;
        }
    
        for (int i = startIndex; i < maxSearchLength; ++i)
        {
            if (sb[i] == value[0])
            {
                index = 1;
                while ((index < length) && (sb[i + index] == value[index]))
                    ++index;
    
                if (index == length)
                    return i;
            }
        }
    
        return -1;
    }
    

提交回复
热议问题