замена escape-символа двойными qoutes в c # - PullRequest
2 голосов
/ 01 октября 2011

У меня есть следующая строка в переменной с именем,

s

[{\"roleIndex\":0,\"roleID\":\"c1_r0_23\",\"roleName\":\"Chief Executive\"},                       
{\"roleIndex\":1,\"roleID\":\"c1_r1_154\",\"roleName\":\"Chief Operator\"}]

и я пытаюсь заменить \ "на" следующей командой:

   s.ToString().Replace("\"", """");

но это не работает.

Какой правильный синтаксис в c #?

Ответы [ 3 ]

7 голосов
/ 01 октября 2011

Попробуйте s.ToString().Replace(@"\""", "\"").

@ говорит C # интерпретировать строку буквально и не обрабатывать \ как escape-символ."\"" в качестве второго аргумента использует \ как escape-символ для экранирования двойных кавычек.

Вам также не нужно вызывать ToString(), если s уже имеет тип string.

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

var newString = s.ToString().Replace(@"\""", "\"");
// or s = s.Replace(@"\""", "\"");  if "s" is already a string.
4 голосов
/ 01 октября 2011

Обновление

если у вас есть строка, содержащая ", при просмотре этой строки в непосредственном окне Visual Studio она будет отображаться как \". Это не означает, что ваша строка содержит обратную косую черту! Чтобы доказать это себе, используйте Console.WriteLine, чтобы отобразить фактическое значение строки в консоли, и вы увидите, что обратной косой черты там нет.

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

backslash in immediat window

Оригинальный ответ

Три вещи:

  • Строки неизменны. Replace не изменяет строку - она ​​возвращает новую строку.
  • Хотите заменить кавычку "\"" или обратную косую черту с последующей кавычкой "\\\"". Если вы хотите последнее, было бы лучше использовать дословный строковый литерал, чтобы вместо него можно было написать @"\""".
  • Вам не нужно вызывать ToString в строке.

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

s = s.Replace(@"\""", "\"");

См. На Ideone .

0 голосов
/ 01 октября 2011

По иронии судьбы, вам нужно экранировать кавычки и обратную косую черту следующим образом:

s.ToString().Replace("\\\"", "\"");

В противном случае он соберет ваши строки вместе и сделает то же самое (если вы действительно можете использовать одинарные кавычки):

s.ToString().Replace('"', "");

(ваша вторая строка содержит четыре кавычки ... вот почему вы не получаете ошибку компиляции из-за "" ") *

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