如何更改字符串的第n个元素

时间:2011-05-13 09:47:41

标签: c# string

我在c#中有一个代码,如下面的

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

它出错了

  

属性或索引器'string.this [int]'无法分配给 - 它被读取

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

5 个答案:

答案 0 :(得分:11)

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

两个选项:

  • 使用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);
    

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

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

答案 1 :(得分:1)

关注MSDN

  

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

请查看StringBuilder课程或改为使用char数组。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

尝试

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

答案 4 :(得分:0)

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

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