如何在C#中移除字符串的双引号?现有代码添加双引号编译失败
在C#中移除字符串中的双引号(基于现有移除逻辑)
现有一段可移除字符串指定字符的C#代码:
var str = "My name @is ,Wan.;'; Wan"; var charsToRemove = new string[] { "[", "]" }; foreach (var c in charsToRemove) { str = str.Replace(c, string.Empty); }
想在此基础上移除字符串中的双引号,但尝试两种写法均无法编译:
第一种写法:
var str = "My name @is ,Wan.;'; Wan"; var charsToRemove = new string[] { "[", "]", """ }; foreach (var c in charsToRemove) { str = str.Replace(c, string.Empty); }
第二种写法:
var str = "My name @is ,Wan.;'; Wan"; var charsToRemove = new string[] { "[", "]", """" }; foreach (var c in charsToRemove) { str = str.Replace(c, string.Empty); }
同时考虑过使用Char类的IsLetterOrDigit等方法,但不确定是否有可识别双引号的方法。
解决方法
编译失败核心原因是字符串字面量中双引号的转义规则没处理对,以下几种方案可以解决:
方案1:常规字符串转义双引号
在C#的常规字符串里,用反斜杠\转义双引号,直接添加到移除数组中:
var str = "My name @is ,Wan.;'; Wan"; // 如果原字符串包含双引号,比如 str = "\"Hello\" World",同样适用 var charsToRemove = new string[] { "[", "]", "\"" }; foreach (var c in charsToRemove) { str = str.Replace(c, string.Empty); }
方案2:使用逐字字符串
如果用@开头的逐字字符串,需要用两个双引号""表示一个实际的双引号:
var str = @"My name @is ,Wan.;'; Wan"; var charsToRemove = new string[] { "[", "]", @"""" }; // 若使用C# 11及以上版本,还可以用原始字符串字面量简化:new string[] { "[", "]", """ } foreach (var c in charsToRemove) { str = str.Replace(c, string.Empty); }
方案3:用Linq过滤(替代遍历替换)
如果不想用遍历替换的方式,也可以借助Linq直接过滤掉双引号:
using System.Linq; var str = "My name @is ,Wan.;'; Wan"; str = new string(str.Where(c => c != '"').ToArray());
这种方式直接筛选出所有非双引号的字符,重新构建字符串,逻辑更简洁。
内容的提问来源于stack exchange,提问作者Steven Douglas
相关产品推荐
相关产品推荐

