Есть ли простой способ изменить символ в строке в C #? - PullRequest
8 голосов
/ 16 июля 2010

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

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

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

"Свойство или индексатор 'string.this [int]' нельзя назначить - оно доступно только для чтения"

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

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

Ответы [ 8 ]

18 голосов
/ 16 июля 2010

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

string s = "foo";
char[] arr = s.ToCharArray();
arr[1] = 'x';
s = new string(arr);
13 голосов
/ 16 июля 2010

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

StringBuilder s = new StringBuilder("abc");

s[1] = 'x';
2 голосов
/ 16 июля 2010

Помните, что в управляемом и безопасном .Net строки являются неизменяемыми, поэтому даже если бы вы могли сделать вышеописанное, вы бы действительно создавали новую копию строки с заменой.

Если вы заменяете только одного персонажа, вероятно, лучшим выбором будет простой цикл.

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

  string s = "abc";
  var stringBuilder = new StringBuilder(s);
  stringBuilder[1] = 'x';
  s = stringBuilder.ToString();
2 голосов
/ 16 июля 2010

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

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

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

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

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

1 голос
/ 16 июля 2010

Почему бы не сделать это, если вы используете какой-нибудь Linq

private string ConvertStr(string inStr , int inIndex , char inChar)
{
char[] tmp = inStr.ToCharArray();
tmp.SetValue(inChar , inIndex);
return new string(tmp);
}

Это позволит вам заменить любой символ, который вы хотите, тем, который вы хотите.

1 голос
/ 16 июля 2010

Я не думаю, что вы можете сделать это в C #, так как строка не может быть изменена (просто уничтожена и воссоздана).Взгляните на класс StringBuilder .

0 голосов
/ 16 июля 2010

да в c # строку нельзя изменить.

но мы можем попробовать это

string s = "abc";
s = s.Replace('b', 'x');
Console.WriteLine(s);

ответом будет «axc». так как это заменит старую строку новой.

0 голосов
/ 16 июля 2010

Что по этому поводу?

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...