我需要为StringBuilder
类编写一个不区分大小写的Replace
方法的代码。该代码应该可以与现有的StringBuilder
一起使用。一个扩展方法的实现将是很好的。
以下是我计划如何使用该方法:
[TestMethod]
public void StringBuilder_Replace_TTD() {
StringBuilder oRequestText = new StringBuilder(File.ReadAllText("Customer.xml"));
Customer oCustomer = new Customer(null);
foreach (FieldIndex iField in Enum.GetValues(typeof(FieldIndex))) {
oRequestText.Replace("{" iField.ToString() + "}", oCustomer[iField]);
}
Debug.WriteLine(oRequestText.ToString());
}
4条答案
按热度按时间hpxqektj1#
StringBuilder
不支持在搜索/替换文本时使用IComparer
(事实上,根本没有搜索支持)。您可以尝试滚动逐字符版本,但这将很复杂,并且可能仍然表现不佳。根据你的用例,我建议使用字符串而不是
StringBuilder
,并使用string.IndexOf()
来定位输入字符串中你要进行替换的位置-这支持大小写不敏感的搜索。一旦你找到了所有的替换区域,创建一个StringBuilder
,然后复制每个区域-用所需的替换值替换找到的文本。编辑:假设您希望使用
StringBuilder
替换,以避免分配额外的字符串,从而避免性能下降。替换StringBuilder
的缓冲区内的文本实际上可能更昂贵-特别是如果替换字符串的长度与它们正在替换的源字符串的长度不同。每次替换都需要根据替换文本的长度或长度向前或向后移动字符。像这样执行内存块移动将是昂贵的。up9lanfz2#
From:Link
qxsslcnc3#
在你的例子中,你想做的(在伪代码中):
因为在此之后您实际上并没有使用StringBuilder,所以与
字符串的普通替换函数应该可以很容易地支持您想要做的事情。
我假设在你的真实的情况中,你确实想再次使用StringBuilder。但它可能仍然是最简单的方法,执行.ToString(),替换字符串,然后用字符串重新加载StringBuilder。
tkclm6bt4#
我会使用RegExreplace方法,但这意味着将StribgBuilder转换为字符串