首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么StringBuilder没有IndexOf方法?

为什么StringBuilder没有IndexOf方法?
EN

Stack Overflow用户
提问于 2009-08-31 23:55:29
回答 3查看 18.1K关注 0票数 24

我知道我可以调用ToString().IndexOf(...),但我不想创建额外的字符串。我知道我可以手动编写一个搜索例程。我只是想知道为什么框架中不存在这样的例程。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-31 23:57:33

不幸的是,许多为String实现的方法本可以为StringBuilder实现,但没有实现。考虑使用扩展方法来添加您关心的内容。

票数 7
EN

Stack Overflow用户

发布于 2020-11-28 00:02:05

丹尼斯,很好的解决方案。谢谢。我建议对其进行一点优化:

代码语言:javascript
复制
public static int IndexOf(
    this StringBuilder sb,
    string value,
    int startIndex,
    bool ignoreCase)
{
    int len = value.Length;
    int max = (sb.Length - len) + 1;
    var v1 = (ignoreCase)
        ? value.ToLower() : value;
    var func1 = (ignoreCase)
        ? new Func<char, char, bool>((x, y) => char.ToLower(x) == y)
        : new Func<char, char, bool>((x, y) => x == y);
    for (int i1 = startIndex; i1 < max; ++i1)
        if (func1(sb[i1], v1[0]))
        {
            int i2 = 1;
            while ((i2 < len) && func1(sb[i1 + i2], v1[i2]))
                ++i2;
            if (i2 == len)
                return i1;
        }
    return -1;
}
票数 0
EN

Stack Overflow用户

发布于 2009-09-01 00:01:45

令人困惑的是,在StringBuilder上调用ToString()并不会创建额外的对象。为了提高性能,StringBuilder在内部存储了一个String对象;调用ToString()只是返回该对象。

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

https://stackoverflow.com/questions/1359948

复制
相关文章

相似问题

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