C#从StringBuilder的开头提取数据
我想从StringBuilder变量的开头提取一些字符。C#从StringBuilder的开头提取数据,c#,stringbuilder,C#,Stringbuilder,我想从StringBuilder变量的开头提取一些字符。 我写了下面的代码: private string getPart(StringBuilder data, int len) { string s = data.ToString(0, len); data.Remove(0, len); return s; } 关于更好的编码有什么建议吗?您可以使用CopyTo方法: private string getPart(StringBuilder data, int l
我写了下面的代码:
private string getPart(StringBuilder data, int len)
{
string s = data.ToString(0, len);
data.Remove(0, len);
return s;
}
关于更好的编码有什么建议吗?您可以使用
CopyTo
方法:
private string getPart(StringBuilder data, int len)
{
var output = new char[len];
data.CopyTo(0, output, 0, len);
data.Remove(0, len);
return new string(output);
}
如果要在代码的许多部分提取字符, 您可以尝试将该算法实现为扩展方法:
公共静态类StringBuilderExtensions{
公共静态字符串提取(此StringBuilder源代码,整数长度){
if(Object.ReferenceEquals(null,source))
抛出新的ArgumentNullException(“源”);
else if((长度<0)| |(长度>source.length))
抛出新ArgumentOutOfRangeException(“长度”);
//你的实际算法
字符串结果=source.ToString(0,长度);
源。删除(0,长度);
返回结果;
}
}
...
StringBuilder数据=。。。
字符串s=数据。提取(len);//这似乎是合理的。但是,它正在修改字符串生成器,这似乎很奇怪。您是只想获取第一个x字符,还是想从字符串中删除这些字符?是的,我想从一开始就增量提取和处理数据,所以我应该删除提取的数据。这可能是关于为什么不使用System.Collections.Generics.Queue
?非常适合实现方法(教育),谢谢Dmitry
public static class StringBuilderExtensions {
public static String Extract(this StringBuilder source, int length) {
if (Object.ReferenceEquals(null, source))
throw new ArgumentNullException("source");
else if ((length < 0) || (length > source.Length))
throw new ArgumentOutOfRangeException("length");
// Your actual algorithm
String result = source.ToString(0, length);
source.Remove(0, length);
return result;
}
}
...
StringBuilder data = ...
String s = data.Extract(len); // <- Just extract