开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜