我如何按索引值为字符串设置新值?
我试过了:
string a = "abc";
a[0] = "A";
不适用于strings
,但适用于chars
。为什么呢?
答案 0 :(得分:14)
C#中的字符串(以及在基类库中使用System.String
的其他.NET语言)是不可变的。也就是说,你不能用这种方式按字符修改字符串(或者就此而言,你是否可以修改字符串)。
如果要根据索引修改字符串,则必须先使用System.String.ToCharArray()
将其转换为数组。您可以使用System.String
的构造函数将其转换回字符串,并传入已修改的数组。
您的示例必须更改为:
string a = "abc";
char[] array = a.ToCharArray();
array[0] = 'A'; //Note single quotes, not double quotes
a = new string(array);
答案 1 :(得分:5)
System.String
类型不允许通过索引(或通过任何方式)来更改String
变量的内容,必须将其替换为对全新String
的引用。 1}})。但是,The System.Text.StringBuilder
类型允许按索引编写。可以创建一个新的System.Text.StringBuilder
对象(可选地将字符串传递给构造函数),对其进行操作,然后使用其ToString
方法将其转换回字符串。
答案 2 :(得分:3)
替换就是:
string a = "abc";
a = a.Remove(0, 1);
a = a.Insert(0, "A");
或者C说:
string a = "abc";
a = a.Remove(2, 1);
a = a.Insert(2, "C");
同样使用stringbuilder可以按照http://msdn.microsoft.com/en-us/library/362314fe.aspx
工作 StringBuilder sb = new StringBuilder("abc");
sb[0] = 'A';
sb[2] = 'C';
string str = sb.ToString();
答案 3 :(得分:2)
如果需要可变字符串,请使用StringBuilder。 另外:a [0]可以表示一个字符,而“A”是一个String对象 - 它是非法的。
答案 4 :(得分:1)
字符的[0]是内存中可以为其分配值的地址。
另一方面,字符串是一个类,在这种情况下,a [0]实际上是对重载operator []的函数调用。您无法为函数指定值。