Reputation: 4249
I have a long string (a path) with double backslashes, and I want to replace it with single backslashes:
string a = "a\\b\\c\\d";
string b = a.Replace(@"\\", @"\");
This code does nothing...
b
remains "a\\b\\c\\d"
I also tried different combinations of backslashes instead of using @
, but no luck.
Upvotes: 2
Views: 23355
Reputation: 758
I did this in a code in a UWP application.
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;
}
and the ones without the @ symbol is the one that actually worked. this is C# 8 and C# 9
Upvotes: 0
Reputation:
this works
You don't even need string b = a.Replace(@"\", @"\");
but like if we generate a dos command through c# code... eg:- to delete a file this wil help
Upvotes: 0
Reputation: 101052
In C#, you can't have a string like "a\b\c\d"
, because the \
has a special meaning: it creates a escape sequence together with a following letter (or combination of digits).
\b
represents actually a backspace, and \c
and \d
are invalid escape sequences (the compiler will complain about an "Unrecognized escape sequence").
So how do you create a string with a simple \
? You have to use a backslash to espace the backslash:\\
(it's the espace sequence that represents a single backslash).
That means that the string "a\\b\\c\\d"
actually represents a\b\c\d
(it doesn't represent a\\b\\c\\d
, so no double backslashes). You'll see it yourself if you try to print this string.
C# also has a feature called verbatim string literals (strings that start with @
), which allows you to write @"a\b\c\d"
instead of "a\\b\\c\\d"
.
Upvotes: 1
Reputation: 56509
You're wrong. "\\"
return \
(know as escaping)
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
You don't even need string b = a.Replace(@"\\", @"\");
Upvotes: 1
Reputation: 18743
Because you declared a
without using @
, the string a
does not contain any double-slashes in your example. In fact, in your example, a == "a\b\c\d"
, so Replace
does not find anything to replace. Try:
string a = @"a\\b\\c\\d";
string b = a.Replace(@"\\", @"\");
Upvotes: 9