.net - 如何在 .NET 中通过索引有效地覆盖字符串的一部分?

标签 .net string stringbuilder

在我的 .NET 程序中,我允许用户定义“字段”,这些字段是由业务逻辑计算的值。这些字段具有位置和长度,因此它们都可以插入到给定索引处的单个输出字符串中。我还允许用户指定此输出字符串的默认内容。如果没有定义字段来替换给定位置,则输出默认字符

我的问题是,我怎样才能有效地做到这一点? StringBuilder 类有一个 Insert(int index, string value) 方法,但这每次都会延长输出字符串而不是覆盖它。我是否必须使用 StringBuilder[int index] 索引器一次设置一个字符,这样效率低吗?由于我将多次执行此操作,因此我希望它尽可能快。

谢谢。

最佳答案

一次只做一个角色可能是最好的选择。我这样说是因为调用InsertRemoveStringBuilder 上导致字符右移/左移,就像在任何可变索引集合(例如 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/

相关文章:

ruby-on-rails - 如何订购字母列表 ("a","b","c",... ,"z","aa","ab")? String#succ 和 <=> 在这种情况下似乎不能很好地协同工作

java - StringBuilder 是否在每个操作中创建一个新的 String?

.net - 从托管代码调用具有固定缓冲区的非托管 DLL(编码问题)

.net - Silverlight + 工作流基础

javascript - 为什么我会收到此意外的字符串错误?

c - TAG 替换 C 字符串

string - 哪个方案的性能更好 : StringBuilder or String Interpolation-Concatenation

c# - 概念(可能是事件代理?)

c# - 是否可以从 ASP.NET 路由推断站点地图?

.net - 如何为 .NET Standard 创建 "NuGet Package Management Project"?