【问题标题】:how to change nth element of the string如何更改字符串的第n个元素
【发布时间】:2017-09-28 20:40:24
【问题描述】:

我在 C# 中有一个代码,如下所示

string s = new string('~',25);
int ind = 5;
s[ind] = 'A';

报错

无法将属性或索引器“string.this[int]”分配给 -- 已读取

那么问题是什么,我该如何解决。

【问题讨论】:

  • 字符串在C#中是不可变的,所以需要使用stringBuilder

标签: c# string


【解决方案1】:

字符串是不可变的 - 您无法更改现有的。

两种选择:

  • 使用StringBuilder,例如

    StringBuilder builder = new StringBuilder(new string('~', 25));
    builder[5] = 'A';
    string result = builder.ToString();
    
  • 从 char 数组构建一个新字符串:

    char[] chars = new string('~', 25).ToCharArray();
    chars[5] = 'A';
    string result = new string(chars);
    

在这两种情况下,您都可以根据需要填充可变数据而无需构建新字符串开始 - 这将涉及更多代码,但可能会更有效。

或者,您可以使用子字符串并将它们连接在一起,根据另一个答案......基本上有很多方法可以解决这个问题。哪个合适取决于您的实际用例。

【讨论】:

    【解决方案2】:

    关注MSDN

    字符串是不可变的——字符串对象的内容在对象创建后不能更改,尽管语法看起来好像您可以这样做。

    查看@987654322@ 类或改用char 数组。

    【讨论】:

      【解决方案3】:

      C# 字符串是不可变的,这意味着一旦构建就无法更改。尝试改用字符数组。

      【讨论】:

        【解决方案4】:

        试试

        s = s.Substring(0, ind) + "A" + s.Substring(ind + 1);
        

        【讨论】:

          【解决方案5】:

          您可以使用Stringbuilder,您可以在其中分配给索引器:

          StringBuilder sb = s;
          int ind = 5;
          sb[ind] = 'A';
          s = sb.ToString();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-06-29
            • 2011-07-14
            • 2020-09-02
            • 2016-02-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多