C# String.Substring 等效于 StringBuilder?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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 需要参数索引和长度。

以上是关于C# String.Substring 等效于 StringBuilder?的主要内容,如果未能解决你的问题,请参考以下文章

C# 等效于 vcclr.h 中存在的 PtrToStringChars(String s) 函数

C#中Substring具体怎么用?(复杂的例子看不懂)

C# 等效于 AtlEscapeUrl

C# 等效于 Apache HttpAsyncClient

C# 等效于 VB DLL 函数声明 (InternetSetOption)?

C# 等效于 Java 的 Arrays.fill() 方法[重复]