在我的 .NET 程序中,我允许用户定义“字段”,这些字段是由业务逻辑计算的值。这些字段具有位置和长度,因此它们都可以插入到给定索引处的单个输出字符串中。我还允许用户指定此输出字符串的默认内容。如果没有定义字段来替换给定位置,则输出默认字符
我的问题是,我怎样才能有效地做到这一点? StringBuilder 类有一个 Insert(int index, string value) 方法,但这每次都会延长输出字符串而不是覆盖它。我是否必须使用 StringBuilder[int index] 索引器一次设置一个字符,这样效率低吗?由于我将多次执行此操作,因此我希望它尽可能快。
谢谢。
最佳答案
一次只做一个角色可能是最好的选择。我这样说是因为调用Insert
和 Remove
在 StringBuilder
上导致字符右移/左移,就像在任何可变索引集合(例如 List<char>
)中使用类似方法一样.
也就是说,这是一个极好的扩展方法候选者,可以让您的生活更轻松一些。
public static StringBuilder ReplaceSubstring(this StringBuilder stringBuilder, int index, string replacement)
{
if (index + replacement.Length > stringBuilder.Length)
{
// You could throw an exception here, or you could just
// append to the end of the StringBuilder -- up to you.
throw new ArgumentOutOfRangeException();
}
for (int i = 0; i < replacement.Length; ++i)
{
stringBuilder[index + i] = replacement[i];
}
return stringBuilder;
}
使用示例:
var builder = new StringBuilder("My name is Dan.");
builder.ReplaceSubstring(11, "Bob");
Console.WriteLine(builder.ToString());
输出:
My name is Bob.
关于.net - 如何在 .NET 中通过索引有效地覆盖字符串的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3459228/