String.Replace не заменяет скобки пустой строкой - PullRequest
5 голосов
/ 02 июня 2009

Следующий бит кода C #, похоже, ничего не делает:

String str = "{3}";
str.Replace("{", String.Empty);
str.Replace("}", String.Empty);

Console.WriteLine(str);

Это заканчивается выплевыванием: {3}. Я понятия не имею, почему это так. Я делаю такие вещи в Java все время. Есть ли какой-то нюанс обработки строк .NET, который ускользает от меня?

Brian

Ответы [ 9 ]

19 голосов
/ 02 июня 2009

Класс String неизменный ; str.Replace не изменит str, вернет новую строку с результатом. Попробуйте вместо этого:

String str = "{3}";
str = str.Replace("{", String.Empty);
str = str.Replace("}", String.Empty);

Console.WriteLine(str);
8 голосов
/ 02 июня 2009

Строка неизменна; Вы не можете изменить экземпляр строки. Ваши два вызова Replace () ничего не делают с исходной строкой; они возвращают измененную строку. Вы хотите это вместо:

String str = "{3}";
str = str.Replace("{", String.Empty);
str = str.Replace("}", String.Empty);

Console.WriteLine(str);

Так же работает и в Java.

7 голосов
/ 02 июня 2009

Replace фактически не изменяет экземпляр строки, в которой вы его вызываете. Вместо этого он просто возвращает измененную копию.

Попробуйте это:

String str = "{3}";
str = str.Replace("{", String.Empty);
str = str.Replace("}", String.Empty);

Console.WriteLine(str);
6 голосов
/ 02 июня 2009

Str.Replace возвращает новую строку. Итак, вам нужно использовать его следующим образом:

String str = "{3}";
str = str.Replace("{", String.Empty);
str = str.Replace("}", String.Empty);
5 голосов
/ 02 июня 2009

Функция Replace возвращает измененную строку, поэтому вам необходимо присвоить ее обратно вашей переменной str.

String str = "{3}";
str = str.Replace("{", String.Empty);
str = str.Replace("}", String.Empty);

Console.WriteLine(str);
5 голосов
/ 02 июня 2009

Полагаю, тебе придется сделать

String str = "{3}";
str = str.Replace("{", String.Empty);
str = str.Replace("}", String.Empty);

Console.WriteLine(str);

Посмотрите на String.Replace ссылка:

Тип возвращаемого значения: System.String

Строка, эквивалентная этому экземпляру, но со всеми экземплярами oldValue заменено новым значением.

4 голосов
/ 02 июня 2009

Я считаю, что str.Replace возвращает значение, которое вы должны присвоить своей переменной. Так что вам нужно будет сделать что-то вроде:

String str = "{3}";
str = str.Replace("{", String.Empty);
str = str.Replace("}", String.Empty);

Console.WriteLine(str);
3 голосов
/ 02 июня 2009

кроме всех предложений на данный момент - вы также можете выполнить это, не изменяя значение исходной строки, используя встроенные функции замены в выводе ...

String str = "{3}";

Console.WriteLine(str.Replace("{", String.Empty).Replace("}", String.Empty));
3 голосов
/ 02 июня 2009

Метод Replace возвращает строку с заменой. Я думаю, что вы ищете это:

str = str.Replace("{", string.Empty);
str = str.Replace("}", string.Empty);

Console.WriteLine(str);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...