c#replace \"characters

Tim*_*lts 25 c# replace special-characters

我发送了一个XML字符串,我试图通过XmlReader解析,我试图去除\"字符.

我试过了

.Replace(@"\", "")
.Replace("\\''", "''")
.Replace("\\''", "\"")
Run Code Online (Sandbox Code Playgroud)

加上其他几种方式.

有任何想法吗?

Jon*_*eet 55

你是这样尝试的:

string text = GetTextFromSomewhere();
text.Replace("\\", "");
text.Replace("\"", "");
Run Code Online (Sandbox Code Playgroud)

?如果是这样,那就是问题 - Replace不更改原始字符串,它会返回一个新的字符串,并执行替换...所以你想要:

string text = GetTextFromSomewhere();
text = text.Replace("\\", "").Replace("\"", "");
Run Code Online (Sandbox Code Playgroud)

请注意,这将替换每个反斜杠每个双引号字符; 如果你只是想更换 "反斜线后跟双引号"你只需使用:

string text = GetTextFromSomewhere();
text = text.Replace("\\\"", "");
Run Code Online (Sandbox Code Playgroud)

(正如评论中所提到的,这是因为字符串在.NET中是不可变的 - 一旦你以某种方式得到一个字符串对象,那个字符串将始终具有相同的内容.你可以将一个不同字符串的引用分配给一个变量当然,但这实际上并没有改变现有字符串的内容.)

  • 另请注意,调试器在显示时会转义字符串.这些额外的反斜杠当然不能被`.Replace()`删除. (5认同)
  • 这是一个常见的错误,但是得到了很多.在C#中,`string`是不可变的,如果你改变它的某些东西,比如使用`Replace`方法,它总会返回一个新的字符串. (2认同)

小智 8

在.NET Framework 4和MVC中,这是唯一有效的表示:

Replace(@"""","")
Run Code Online (Sandbox Code Playgroud)

在任何组合中使用反斜杠都不起作用......


dcp*_*dcp 5

试试这样:

Replace("\\\"","");
Run Code Online (Sandbox Code Playgroud)

这将替换\"空字符串的出现.

例如:

string t = "\\\"the dog is my friend\\\"";
t = t.Replace("\\\"","");
Run Code Online (Sandbox Code Playgroud)

这将导致:

the dog is my friend
Run Code Online (Sandbox Code Playgroud)

  • meh on string.empty.这是相同的差异. (2认同)