当前位置:  开发笔记 > 编程语言 > 正文

在C#中在令牌之前和之后插入文本的最佳算法?

如何解决《在C#中在令牌之前和之后插入文本的最佳算法?》经验,为你挑选了1个好方法。

我正在研究MVC C#应用程序的搜索功能,该应用程序将通过过滤器放置一个(可能很大的)大量文本,并且在给定搜索查询的情况下,将在每个搜索项之前和之后放置带有突出显示样式的html .

我有一个简单的算法,但我觉得它会很慢,可能是因为需要创建的字符串数量(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;
}

我想知道是否有人可以提供一些更好的算法的提示,这些算法可以更好地处理大块文本?我正在考虑使用一个字符串构建器,但我也想到我可能会以完全错误的方式接近它.任何见解将不胜感激.



1> LukeH..:

正则表达式将完成这项工作,代码应该更简单.但是,您需要进行测试以确定它是否确实提供了更好的性能.像这样的东西:

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", "$&", "bar");  //call like so

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有