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) 函数