Есть ли простой способ изменить символ в строке в 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".)
нет, вы не можете, так как строки являются неизменными, вы должны создать новую строку:
вы должны использовать метод, который возвращает новую строку с нужной модификацией.
надеюсь, что это поможет!
помните, что в управляемом и безопасном .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". поскольку это заменит старую строку новой строкой.