用c#中的双引号替换转义字符

时间:2011-09-30 20:42:35

标签: c# asp.net string

我在名为

的变量中有以下字符串

S:

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

我试图取代\"用"使用以下命令:

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

但这不起作用。

c#中的正确语法是什么?

3 个答案:

答案 0 :(得分:7)

尝试s.ToString().Replace(@"\""", "\"")

@告诉C#按字面解释字符串而不是将\视为转义字符。 "\""作为第二个参数使用\作为转义字符来转义双引号。

如果ToString()已经是s类型,您也无需致电string

最后但并非最不重要的一点是,不要忘记未完成字符串替换并将创建一个新字符串。如果要保留该值,则需要将其分配给变量:

var newString = s.ToString().Replace(@"\""", "\"");
// or s = s.Replace(@"\""", "\"");  if "s" is already a string.

答案 1 :(得分:4)

<强>更新

如果您有一个包含"的字符串,当您在Visual Studio立即窗口中查看此字符串时,它将显示为\"意味着您的字符串包含反斜杠!要自己证明这一点,使用Console.WriteLine在控制台中显示字符串的实际值,您将看到反斜杠不存在。

这是一个截图,显示当字符串只包含一个引号时,即时窗口中的反斜杠。

backslash in immediat window

原始回答

三件事:

  • 字符串是不可变的。 Replace不会改变字符串 - 它返回一个新字符串。
  • 是否要替换引用"\""或反斜杠后跟引用"\\\""。如果您想要后者,最好使用逐字字符串文字,以便您可以改为编写@"\"""
  • 您无需在字符串上调用ToString

试试这个:

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

ideone上查看。

答案 2 :(得分:0)

具有讽刺意味的是,你需要像以下那样逃避引号和反斜杠:

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

否则它会将你的字符串拼凑在一起并做同样的事情(如果你真的可以使用这样的单引号):

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

(你的第二个字符串有四个引号......这就是为什么你没有因为“”而得到编译错误的原因)