首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用StringComparer和StringBuilder搜索字符串

使用StringComparer和StringBuilder搜索字符串
EN

Stack Overflow用户
提问于 2015-06-18 21:50:28
回答 2查看 135关注 0票数 2

我需要使用全球化规则来搜索文档中出现的所有字符串。伪码是:

代码语言:javascript
复制
var searchText = "Hello, World";
var compareInfo = new CultureInfo("en-US").CompareInfo;

DocumentIterator start = null; // the start position if a match occurs
var sb = new StringBuilder();

// the document is not a string, but exposes an iterator to its content
for (var iter = doc.Start(); iter.IsValid(); ++iter)
{
    start = start ?? iter; // the start of the potential match

    var ch = iter.GetChar(); 
    sb.Append(ch);

    if (compareInfo.Compare(searchText, sb.ToString()) == 0) // exact match
    {
        Console.WriteLine($"match at {start}-{iter}");
        // not shown: continue to search for more occurrences.
    }
    else if (!compareInfo.IsPrefix(criteria.Text, sb.ToString()))
    {
        // restart the search from the character immediately following start
        sb.Clear();
        iter = start; // this gets incremented immediately
        start = null;
    }
}

这将委托给CompareInfo,这是区分区域性的字符串匹配的困难工作。

但是,代码实现的类似流的流程存在性能问题,因为它在每次迭代中调用StringBuilder.ToString(),从而破坏了StringBuilder的性能优势。

问:我怎样才能有效地进行这个搜索?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-18 22:50:10

那么,为什么不首先将整个文档复制到一个字符串生成器中,即使用1 ToString()。然后,只需使用类似的方案来迭代所有可能的值。使用compareInfo.Compare(criteria.Text,0,criteria.Text.Length,docString,startIndex,checkLength)

票数 0
EN

Stack Overflow用户

发布于 2015-06-18 22:04:59

为什么不使用对区域性敏感的字符串IndexOf,然后使用indexOf遍历您的文档以启动下一个搜索,直到什么也找不到--参见first answer here

启动它所需要做的就是设置当前的文化。我假设do循环是显而易见的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30926396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档