1

我有一个带有双反斜杠的长字符串(路径),我想用单反斜杠替换它:

string a = "a\\b\\c\\d";
string b = a.Replace(@"\\", @"\");  

这段代码什么都不做...

b遗迹"a\\b\\c\\d"

我还尝试了不同的反斜杠组合而不是使用@,但没有运气。

4

5 回答 5

7

因为您声明a时没有使用 using @,所以该字符串a在您的示例中不包含任何双斜杠。实际上,在您的示例中,a == "a\b\c\d", 所以Replace找不到任何要替换的东西。尝试:

string a = @"a\\b\\c\\d";
string b = a.Replace(@"\\", @"\"); 
于 2013-07-29T07:21:21.423 回答
1

你错了。 "\\"返回\(称为转义)

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(@"\\", @"\");

于 2013-07-29T07:24:49.090 回答
1

在 C# 中,不能有类似 的字符串"a\b\c\d",因为\具有特殊含义:它创建一个转义序列以及后面的字母(或数字组合)。

\b实际上表示退格,\c并且\d是无效的转义序列(编译器会抱怨“无法识别的转义序列”)。

那么如何用简单的\. 您必须使用反斜杠来分隔反斜杠:(\\它是表示单个反斜杠的 espace 序列)。

这意味着字符串"a\\b\\c\\d"实际上代表a\b\c\d(它不代表a\\b\\c\\d,所以没有双反斜杠)。如果您尝试打印此字符串,您将自己看到它。

C# 还有一个称为逐字字符串文字(以 开头的字符串@)的功能,它允许您编写@"a\b\c\d"而不是"a\\b\\c\\d".

于 2013-07-29T07:46:39.177 回答
0

这行得通

你甚至不需要 string b = a.Replace(@"\", @"\");

但就像我们通过 c# 代码生成一个 dos 命令一样......例如:- 删除一个文件,这将有所帮助

于 2015-03-02T04:43:02.610 回答
0

我在 UWP 应用程序的代码中执行了此操作。

foreach (var item in Attendances)
{
   string a = item.ImagePath;
   string b = a.Replace(@"\\", "/");
   string c = a.Replace("\\", "/");

   Console.WriteLine(b);
   Console.WriteLine(a);
   item.ImagePath = c;
}

没有@ 符号的是实际工作的那个。这是 C# 8 和 C# 9

于 2021-03-30T06:33:12.080 回答