在C#中用双引号替换转义字符

3
我有一个变量称为“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
尝试使用 s.ToString().Replace(@"\""", "\"")@ 告诉 C# 直接理解字符串,并不将 \ 视为转义字符。第二个参数中的 "\"" 使用 \ 作为转义字符,用于转义双引号。
如果 s 已经是 string 类型,则不需要调用 ToString()
最后但并非最不重要的一点是,请注意字符串替换不是原地进行的,并且会创建一个新字符串。如果您想保留原值,需要将其分配给变量:
var newString = s.ToString().Replace(@"\""", "\"");
// or s = s.Replace(@"\""", "\"");  if "s" is already a string.

@MarkByers 您说得完全正确。我在那里打错了一个字。现在已经修复了。谢谢! - Adam Lear
我尝试了ideone.com/O0bne的链接,但出现了编译错误......你需要在哪里放置额外的引号? - MdeVera
@MdeVera 我更新了我的帖子,现在包含正确的代码。ideone链接只展示了我最初犯的错误。 - Adam Lear

4

更新

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

下面是一个屏幕截图,当字符串仅包含单引号时,在即时窗口中显示反斜杠。

backslash in immediat window

原始答案

有三件事需要注意:

  • 字符串是不可变的。Replace方法不改变原来的字符串,而是返回一个新的字符串。
  • 你是想替换引号"\""还是带有反斜杠的引号"\\\""。如果是后者,最好使用逐字字符串,这样你可以写成@"\"""
  • 你不需要对字符串调用ToString方法。

试试这个:

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

ideone上查看。


1
我尝试了你的解决方案,但仍然无法将反斜杠和双引号替换为一个双引号。 - MdeVera
@MdeVera:你看,我链接了一个在线编译器来展示我的程序是如何工作的。我猜想你实际上并没有在字符串中拥有你认为的那些字符。你是如何查看这个字符串的呢?是在源代码中查看吗?还是使用调试器?或者使用Console.WriteLine来显示这个字符串?你能提供一个小而可编译的程序来演示你遇到的问题吗?类似于我在答案中提供的那个程序? - Mark Byers
我只是在调试并在即时窗口中查看我的结果。 - MdeVera
我不打算显示数据,因为我的下一步是循环遍历数组将数据插入到数据库中。 - MdeVera
2
@MdeVera:你的字符串是正确的。你不需要替换任何东西。是调试器“错误地”显示它们,让你感到困惑。使用Console.WriteLine的唯一目的是让你确信你的字符串实际上是正确的,因为我相当确定你不会在没有亲眼看到之前相信我的话。只需尝试一下,你就会明白我的意思。一旦你确信自己没有问题,就可以再次删除WriteLine。 - Mark Byers

0

具有讽刺意味的是,您需要像这样转义引号和反斜杠:

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

否则它将连接您的字符串并执行与此相同的操作(如果您实际上可以像这样使用单引号):

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

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


我尝试了 s.ToString().Replace('"', ""); ,但是出现了“string.Replace(char, char)”的最佳重载方法匹配有一些无效参数的错误提示。 - MdeVera
@MdeVera 对,这就是为什么我说你实际上不能这样做。我只是举了一个简化的例子来说明它的等效性。 - N_A

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接