在C#中用\替换\\
我有一个带有双反斜杠的长字符串(路径),我想用单个反斜杠替换它:
string a = "a\\b\\c\\d"; string b = a.Replace(@"\\", @"\");
这段代码什么都不做……
b
仍然是"a\\b\\c\\d"
我也尝试了不同的反斜杠组合,而不是使用@
,但没有运气。
在C#中,您不能拥有类似"a\b\c\d"
的字符串,因为\
具有特殊含义:它创建一个转义序列以及后面的字母(或数字组合)。
\b
实际上表示退格, \c
和\d
是无效的转义序列(编译器会抱怨“无法识别的转义序列”)。
那么如何用简单的\
创建一个字符串呢? 您必须使用反斜杠来填充反斜杠: \\
(它是表示单个反斜杠的espace序列)。
这意味着字符串"a\\b\\c\\d"
实际上表示a\b\c\d
(它不代表a\\b\\c\\d
,因此没有双反斜杠)。 如果您尝试打印此字符串,您将自己看到它。
C#还有一个名为verbatim string literals (以@
开头的字符串)的function,它允许你编写@"a\b\c\d"
而不是"a\\b\\c\\d"
。
因为您声明a
不使用@
,所以字符串a
在您的示例中不包含任何双斜杠。 实际上,在您的示例中, a == "a\b\c\d"
,因此Replace
找不到任何要替换的内容。 尝试:
string a = @"a\\b\\c\\d"; string b = a.Replace(@"\\", @"\");
你错了。 "\\"
返回\
(知道逃避)
string a = "a\\b\\c\\d"; System.Console.WriteLine(a); // prints a\b\c\d string b = a.Replace(@"\\", @"\"); System.Console.WriteLine(b); // prints a\b\c\d
你甚至不需要string b = a.Replace(@"\\", @"\");
这很有效
你甚至不需要字符串b = a.Replace(@“\”,@“\”);
但是如果我们通过c#代码生成dos命令…例如: – 删除文件这将有帮助