我在名为
的变量中有以下字符串S:
[{\"roleIndex\":0,\"roleID\":\"c1_r0_23\",\"roleName\":\"Chief Executive\"},
{\"roleIndex\":1,\"roleID\":\"c1_r1_154\",\"roleName\":\"Chief Operator\"}]
我试图取代\"用"使用以下命令:
s.ToString().Replace("\"", """");
但这不起作用。
c#中的正确语法是什么?
答案 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
在控制台中显示字符串的实际值,您将看到反斜杠不存在。
这是一个截图,显示当字符串只包含一个引号时,即时窗口中的反斜杠。
原始回答
三件事:
"\""
或反斜杠后跟引用"\\\""
。如果您想要后者,最好使用逐字字符串文字,以便您可以改为编写@"\"""
。ToString
。试试这个:
s = s.Replace(@"\""", "\"");
在ideone上查看。
答案 2 :(得分:0)
具有讽刺意味的是,你需要像以下那样逃避引号和反斜杠:
s.ToString().Replace("\\\"", "\"");
否则它会将你的字符串拼凑在一起并做同样的事情(如果你真的可以使用这样的单引号):
s.ToString().Replace('"', "");
(你的第二个字符串有四个引号......这就是为什么你没有因为“”而得到编译错误的原因)