Is there an easy way to change a char in a string in C#?
I want to do this:
string s = "abc";
开发者_StackOverflow中文版s[1] = 'x';
and s will become "axc". However, it seems that string[i] only has a getter and has no setter. The compiler gives me the following error:
"Property or indexer 'string.this[int]' cannot be assigned to -- it is read only"
I guess I could make a loop and change the char i want. but i was just wondering if there is an easy way to do it? And why there isn't a setter for string[i]?
Thanks in advance.
Strings are immutable, so you have to make a char[]
array, change it, then make it back into a string:
string s = "foo";
char[] arr = s.ToCharArray();
arr[1] = 'x';
s = new string(arr);
Strings are immutable which is why there's no setter, you can however use a string builder:
StringBuilder s = new StringBuilder("abc");
s[1] = 'x';
(Your example is slightly wrong: s[2] = 'x' should change it to "abx".)
No you can't, since strings are immutable, you have to create a new string:
http://en.wikipedia.org/wiki/Immutable_object
You should use a method that returns a new string with the desired modification.
Hope that helps!
Remember, in managed and safe .Net, strings are immutable, so even if you could do the above, you'd really be creating a new copy of the string with the replacement.
If you are only replacing one character, a simple loop is probably your best bet.
However, if you are going to make multiple replacements, consider using a StringBuilder
:
string s = "abc";
var stringBuilder = new StringBuilder(s);
stringBuilder[1] = 'x';
s = stringBuilder.ToString();
I don't think you can do this in C#, as the string cannot be altered (just destroyed and recreated). Have a look at the StringBuilder class.
Why not do this if you're using some Linq
private string ConvertStr(string inStr , int inIndex , char inChar)
{
char[] tmp = inStr.ToCharArray();
tmp.SetValue(inChar , inIndex);
return new string(tmp);
}
That should let you replace whatever char you want with whatever char you want.
What's about this?
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));
yes in c# string can not be altered.
but we can try this
string s = "abc";
s = s.Replace('b', 'x');
Console.WriteLine(s);
answer will be "axc". as this will replace the old string with new string.
精彩评论