有没有一种简单的方法来在C#中更改字符串中的字符?
我想做这个:
string s = "abc"; s[1] = 'x';
并且s将成为“axc”。 但是,似乎string [i]只有一个getter并且没有setter。 编译器给我以下错误:
“属性或索引器’string.this [int]’无法分配给 – 它是只读的”
我想我可以制作一个循环并改变我想要的字符。 但我只是想知道是否有一个简单的方法来做到这一点? 为什么没有字符串[i]的setter?
提前致谢。
字符串是不可变的,因此您必须创建一个char[]
数组,更改它,然后将其重新转换为字符串:
string s = "foo"; char[] arr = s.ToCharArray(); arr[1] = 'x'; s = new string(arr);
字符串是不可变的,这就是为什么没有setter,但是你可以使用字符串构建器:
StringBuilder s = new StringBuilder("abc"); s[1] = 'x';
(你的例子有些错误:s [2] =’x’应该把它改成“abx”。)
不,你不能,因为字符串是不可变的,你必须创建一个新的字符串:
您应该使用一个返回具有所需修改的新字符串的方法。
希望有所帮助!
请记住,在托管和安全的.Net中,字符串是不可变的,因此即使您可以执行上述操作,您也可以使用替换创建字符串的新副本。
如果你只是替换一个角色,一个简单的循环可能是你最好的选择。
但是,如果要进行多次替换,请考虑使用StringBuilder
:
string s = "abc"; var stringBuilder = new StringBuilder(s); stringBuilder[1] = 'x'; s = stringBuilder.ToString();
我认为你不能在C#中做到这一点,因为字符串不能被改变(只是被破坏和重新创建)。 看看StringBuilder类。
如果您使用的是Linq,为什么不这样做呢
private string ConvertStr(string inStr , int inIndex , char inChar) { char[] tmp = inStr.ToCharArray(); tmp.SetValue(inChar , inIndex); return new string(tmp); }
这应该让你用你想要的任何字符替换你想要的任何字符。
这有什么关系?
string originalString = "abc"; var index = 1; char charToReplace = 'x'; var newString = string.Format("{0}{1}{2}", originalString.Substring(0, index), charToReplace, originalString.Substring(index + 1));
是的,在c#字符串中无法更改。
但我们可以试试这个
string s = "abc"; s = s.Replace('b', 'x'); Console.WriteLine(s);
答案将是“axc”。 因为这将用新字符串替换旧字符串。