Подтвердить что ты не робот

Как заменить последний символ строки с помощью С#?

string str = "Student_123_";

Мне нужно заменить последний символ "_" на ",". Я сделал это так.

str.Remove(str.Length -1, 1);
str = str + ",";

Однако возможно ли достичь этого более эффективно. может быть одной строкой кода. Кстати, последним символом может быть любой символ. Так что Replace не будет работать здесь.

4b9b3361

Ответ 1

Нет.

В строках С# неизменяемы, и поэтому вы не можете изменить строку "на месте". Сначала вы должны удалить часть строки, а затем создать новую строку. На самом деле это также означает, что ваш исходный код неверен, поскольку str.Remove(str.Length -1, 1); не изменяет str вообще, он возвращает новую строку! Это должно сделать:

str = str.Remove(str.Length -1, 1) + ",";

Ответ 2

С#.NET делает это слишком легко.

str = str.TrimEnd('_')

Ответ 3

Это ограничение работы с string. Вы можете использовать StringBuilder, если вам нужно сделать много изменений, подобных этому. Но это не стоит для простой задачи, в которой вы нуждаетесь.

str = str.Substring(0, str.Length - 1) + ",";

Ответ 4

Элегантный, но не очень эффективный. Заменяет любой символ в конце str запятой.

str = Regex.Replace(str, ".$", ",");

Ответ 5

Использовать класс StringBuilder

                    StringBuilder mbuilder = new StringBuilder("Student_123_");

        mbuilder[mbuilder.Length-1] = ',';

        Console.WriteLine(mbuilder.ToString());

Ответ 6

str = str.Substring(0, str.Length-1) + ",";

Ответ 7

Ну, что у вас не получится, потому что str.Remove(...) не манипулирует str, он возвращает новую строку с завершенной операцией удаления.

Итак - вам нужно:

str = str.Remove(str.Length-1,1);
str = str + ",";

В плане эффективности есть несколько других вариантов, которые вы могли бы сделать (подстрока, обрезка...), но в конечном итоге вы получите ту же самую сложность времени/пространства.

EDIT:

Кроме того, не пытайтесь раздавить все в одну строку, программисты, которые приходят после вас, оценят большую читаемость. (Хотя в этом случае одна строка также легко читается.) Одна строка!= Более эффективная.

Ответ 8

С одной строкой кода вы можете написать:

str = str.Remove(str.Length - 1, 1) + ",";

Ответ 9

str.Remove не изменяет str, он возвращает новую строку. Ваша первая строка должна читать str = str.Remove...

Одна строка? ОК: str = str.Remove(str.Length - 1) + ",";

Я думаю, что так же эффективно, как вы собираетесь. Технически вы создаете две новые строки здесь, а не одну (результат Remove и результат Concatenation). Тем не менее, все, что я могу думать о том, чтобы не создавать две строки, в конечном итоге создает более 1 другого объекта для этого. Вы можете использовать StringBuilder, но это более тяжелый вес, чем дополнительная строка, или, возможно, char[], но он все еще является дополнительным объектом, не лучше, чем я уже упоминал выше.