【问题标题】:C# String.Substring equivalent for StringBuilder?C# String.Substring 等效于 StringBuilder?
【发布时间】:2014-10-06 03:32:47
【问题描述】:

StringBuilder 似乎没有 Substring(start, len) 方法...我在这里缺少什么?

【问题讨论】:

    标签: c# substring stringbuilder


    【解决方案1】:

    StringBuilder 类有一个特殊版本的 ToString 方法,它接受两个参数,与 Substring(startIndex, length) 完全相同。

     StringBuilder sb = new StringBuilder("This is a Test");
     string test = sb.ToString(10, 4);
     Console.WriteLine(test);   // result = Test
    

    【讨论】:

    • 如果您正在执行诸如从通常使用.Substring(0, sb.ToString().Length -1的字符串中删除最后一个字符之类的操作,您还可以访问 StringBuilder 的 Length 属性。
    • 最好在 StringBuilder 本身上执行此操作,而不是将其转换为字符串,然后用少一个字符重新创建另一个字符串。 sb.Length--;
    • mmm 很公平,一个更好的例子是为您想要过滤掉第一个 最后一个字符的起始索引传递非零值。需要明确的是,我上面的例子是不应该做的。
    【解决方案2】:

    这些都是你可以获得所需子字符串的方法:

    StringBuilder b = new StringBuilder();
    b.Append("some text to test out!");
    string s = b.ToString(0, 6);
    //or ....
    char[] letters = new char[6];
    b.CopyTo(0, letters, 0, 6);
    string s1 = new string(letters);
    //or
    string s2 = null;
    for (int i = 0; i < 6; i++)
    {
       s2 += b[i];
    }
    

    【讨论】:

    • 不错的答案,但后者比一月份的糖蜜要慢
    • 大声笑是的,我只是想展示所有可用的选项:)
    【解决方案3】:

    另一种方法,如果您不想构建整个字符串 (StringBuilder.ToString()) 并获取子字符串:

      public static StringBuilder SubString(this StringBuilder input, int index, int length)
    {
        StringBuilder subString = new StringBuilder();
        if (index + length - 1 >= input.Length || index < 0) 
        {
            throw new ArgumentOutOfRangeException("Index out of range!"); 
        }
        int endIndex = index + length;
        for (int i = index; i < endIndex; i++)
        {
            subString.Append(input[i]);
        }
        return subString;
    }
    

    【讨论】:

    • 这个问题的有趣观点。也许您可以删除循环并简单地使用return new StringBuilder(input.ToString(index, length));
    • @Steve - 是的,你是对的,我没有注意到 stringBuilder.ToString 需要参数索引和长度。
    猜你喜欢
    • 2023-03-04
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多