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

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

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

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

"Свойство или индексатор 'string.this [интервал]' не могут быть присвоены - это только для чтения"

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

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

8
задан StarCub 16 July 2010 в 10:26
поделиться

8 ответов

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

string s = "foo";
char[] arr = s.ToCharArray();
arr[1] = 'x';
s = new string(arr);
18
ответ дан 5 December 2019 в 04:58
поделиться

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

StringBuilder s = new StringBuilder("abc");

s[1] = 'x';
13
ответ дан 5 December 2019 в 04:58
поделиться

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

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

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

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

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

2
ответ дан 5 December 2019 в 04:58
поделиться

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

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

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

1
ответ дан 5 December 2019 в 04:58
поделиться

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

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

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

  string s = "abc";
  var stringBuilder = new StringBuilder(s);
  stringBuilder[1] = 'x';
  s = stringBuilder.ToString();
2
ответ дан 5 December 2019 в 04:58
поделиться

да в c# строка не может быть изменена.

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

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

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

0
ответ дан 5 December 2019 в 04:58
поделиться

Что насчет этого?

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));
0
ответ дан 5 December 2019 в 04:58
поделиться

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

1
ответ дан 5 December 2019 в 04:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: