当需要位替换的文档是不变的(一种邮件合并场景)时,我希望能提供一些关于最快替换方法的指示。
当然,有很多方法可以使用 string.replace 和 regexp 进行替换,但看起来他们每次查找匹配项时都需要解析输入文档。这就是我要优化的一点。
我会说您最好的选择可能是将文档拆分为一个数组,其中每个元素都是上一个替换和下一个替换之间的文本。然后,您只需使用字符串连接将拆分数组的内容与每个替换标记交错,而不是替换。
一些伪代码:
doc_array = split(input_doc, "token marker")
for each replace_array in set_of_replace_arrays:
this_doc = ""
while elements remain in doc array:
this_doc.concat(next doc element)
if any elements remain in replace array:
this_doc.concat(next replace element)
output this_doc
好吧,由于您不想解析并且您的输入文档是恒定的,您可以使用 aMemoryStream
来处理您的原始文档并通过使用它们的绝对位置来更改您的位。
另一种方法是使用该String.Format
标记作为占位符:
string input = "Dear {0} {1}";
//...
return String.Format(input, "Mr.", "Farias");
为了提高灵活性,您可以使用XslCompiledTransform并让它输出文本。它针对快速 XML 和文本生成进行了优化,如果需要,您也可以包含一些逻辑。