gpt4 book ai didi

c# - 在 C# 中标记前后插入文本的最佳算法?

转载 作者:太空宇宙 更新时间:2023-11-03 18:20:13 24 4
gpt4 key购买 nike

我正在为一个 MVC C# 应用程序开发一个搜索功能,该应用程序将通过过滤器放置一段(可能很大的)文本,并根据搜索查询放置一个 html <span>在每个搜索词前后都有突出显示的样式。

我有一个简单的算法,但我觉得它会很慢,可能是因为需要创建的字符串数量(2 * 匹配数)。

public static string Surround(string original, string head, string tail, string match, StringComparison comparer)
{
var ret = original;

if (ret.IndexOf(match, 0, comparer) != -1)
{
var lastIndex = 0;

while ((lastIndex = ret.IndexOf(match, lastIndex, comparer)) != -1)
{
ret = ret.Insert(lastIndex, head);
var tailIndex = lastIndex + match.Length + head.Length;
lastIndex = tailIndex;
ret = ret.Insert(tailIndex, tail);
}
}

return ret;
}

我想知道是否有人可以提供一些提示,以获得更好的算法,该算法可以更好地处理大块文本?我正在考虑使用 stringbuilder,但我也想到我可能会以完全错误的方式来处理这个问题。任何见解将不胜感激。

最佳答案

一个正则表达式就可以完成这项工作,而且代码应该简单得多。但是,您需要进行测试以确定它是否真的提供了更好的性能。像这样:

public static string Surround(
string original, string head, string tail, string match)
{
return Regex.Replace(
original, match, head + "$0" + tail, RegexOptions.IgnoreCase);
}

如果您可以在保存 2N 个字符串连接时传入整个替换器,那就更好了:

public static string Surround(string original, string replacer, string match)
{
return Regex.Replace(original, match, replacer, RegexOptions.IgnoreCase);
}

Surround("foo bar baz", "<span>$&</span>", "bar"); //call like so

关于c# - 在 C# 中标记前后插入文本的最佳算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/569847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com