Есть ли простой способ изменить символ в строке в C#?

Я хочу сделать это:

string s = "abc";
s[1] = 'x';

и s станет "axc". Однако кажется, что string[i] имеет только геттер и не имеет сеттера. Компилятор дает мне следующую ошибку:

" свойство или индексатор строку.это[int] ' не может быть назначено чтобы ... это читается только"

думаю, я мог бы сделать цикл и изменить символ, который я хочу. но мне просто интересно, есть ли простой способ сделать это? И почему нет сеттера для строка[я]?

спасибо заранее.

8 ответов


строки неизменяемы, поэтому вам нужно сделать char[] массив, измените его, а затем сделайте его обратно в строку:

string s = "foo";
char[] arr = s.ToCharArray();
arr[1] = 'x';
s = new string(arr);

строки неизменяемы, поэтому нет сеттера, однако вы можете использовать строитель строк:

StringBuilder s = new StringBuilder("abc");

s[1] = 'x';

(ваш пример немного неверен: s[2] = 'x' должен изменить его на "abx".)

нет, вы не можете, так как строки являются неизменными, вы должны создать новую строку:

http://en.wikipedia.org/wiki/Immutable_object

вы должны использовать метод, который возвращает новую строку с нужной модификацией.

надеюсь, что это поможет!


помните, что в управляемом и безопасном .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". поскольку это заменит старую строку новой строкой.