4

我正在将 Java 代码转换为 C#。Java 中的 StringBuilder 类似乎比 C# 有更多的方法。我对(比如说)Java 功能感兴趣

sb.indexOf(s);
sb.charAt(i);
sb.deleteCharAt(i);

这在 C# 中似乎没有。

我想前两个可以建模为

sb.ToString().IndexOf(s);
sb.ToString().CharAt(i);

但是第三个会在 sb 内容的副本而不是实际内容上进行操作吗?

有没有一种通用的方法可以将此功能添加到所有缺失的方法中?

4

4 回答 4

6

您可以将 Chars 成员集合用于 .charAt。同样,您可以使用 .Remove(i,1) 删除位置 i 处的单个字符。

于 2009-10-10T16:00:48.860 回答
2

对于第三个,您可以使用Remove方法:

sb.Remove(i, 1);
于 2009-10-10T15:58:11.203 回答
1

您可以使用如下扩展方法:

    static class Extensions
    {
        public static int IndexOf(this StringBuilder sb, string value)
        {
            return sb.ToString().IndexOf(value);
        }

//if you must use CharAt instead of indexer
        public static int CharAt(this StringBuilder sb, int index)
        {
            return sb[index];
        }
    }
于 2009-10-10T16:02:08.233 回答
0

StringBuilder 有一个索引器,这意味着您可以使用 sb[i] 简单地访问单个字符

于 2009-10-10T22:16:15.697 回答