Ersetzen Sie \\ mit \ in C#
Ich habe eine lange Zeichenkette (einen Pfad) mit Doppel-backslashes, und ich möchte, um es zu ersetzen mit einfache umgekehrte Schrägstriche:
string a = "a\\b\\c\\d";
string b = a.Replace(@"\\", @"\");
Dieser code macht nichts...
b
bleibt "a\\b\\c\\d"
Ich auch versucht, verschiedene Kombinationen von umgekehrten Schrägstrichen statt mit @
, aber kein Glück.
- Sie verwenden sollten, Weg.Kombinieren Sie für die Datei-Pfade sowieso.. auch, darf ich Fragen, warum?
"a\\b" == @"a\b"
.- Es ist ein string... nur stellt einen Pfad
- Ich nicht erstellen, ich bekomme es von woanders.. es sieht aus wie eine\\b\\c\\d
- Einen downvote? ernsthaft?
- Ihr string
a
hat einfache umgekehrte Schrägstriche bereits. - Tut es das nicht. versuchen Sie es und sehen Sie selbst.
- Genau. Es sieht aus wie zwei umgekehrte Schrägstriche. Versuchen
Console.WriteLine("a\\b")
und der zweite backslash magisch disappeares. - Die variable mit diesem string hat zwei, deshalb zermalmt später auf
- "standardmäßig wird der debugger-Anzeige Backslashes als Doppel-Backslash, da es mit dem backslash als steuerzeichen." - Ist es das, was Sie sehen?
- Okay, wenn
var a = @"a\\b";
(Hinweis: die@
), dannvar b = a.Replace(@"\\", @"\");
sollte schon loswerden der zweiten backslash. Seien Sie sicher, die Saiten sind, was Sie denken, Sie sind. - Sechs downvotes? Das ist, schieben Sie es ein bisschen...
Du musst angemeldet sein, um einen Kommentar abzugeben.
In C#, man kann nicht eine Zeichenfolge wie
"a\b\c\d"
, weil die\
hat eine Besondere Bedeutung: es schafft eine escape-Sequenz zusammen mit einem folgenden Brief (oder eine Kombination von Ziffern).\b
stellt eigentlich einen Rückschritt und die\c
und\d
sind ungültige escape-Sequenzen (der compiler beschwert sich über eine "nicht erkannte escape-Sequenz").So, wie Sie tun, erstellen Sie eine Zeichenfolge mit einem einfachen
\
? Verwenden Sie einen umgekehrten Schrägstrich espace backslash:\\
(es ist die espace-Sequenz, repräsentiert einen einzelnen backslash).Dass bedeutet, dass der string
"a\\b\\c\\d"
stellt tatsächlicha\b\c\d
(es dar nichta\\b\\c\\d
, so dass keine doppelten backslashes). Du wirst sehen, es selbst, wenn Sie versuchen, zu drucken, diese Zeichenfolge.C# hat auch eine Funktion namens wörtliche zeichenfolgenliterale (strings beginnen mit
@
), die ermöglicht es Ihnen zu schreiben@"a\b\c\d"
statt"a\\b\\c\\d"
.Weil Sie erklärt
a
ohne Verwendung@
die Zeichenfolgea
enthält keine Doppel-Schrägstriche in deinem Beispiel. In der Tat, in deinem Beispiela == "a\b\c\d"
, soReplace
nichts findet, zu ersetzen. Versuchen:b
mitConsole.WriteLine
für sich selbst zu sehen."a\\b"
ist NICHT das gleiche wie@"a\\b"
. In der Tat, wie bereits erwähnt, auf"a\\b"
ist dieselbe als@"a\b"
.Bist du falsch.
"\\"
zurück\
(wissen, wie die Flucht)Brauchen Sie nicht einmal
string b = a.Replace(@"\\", @"\");
dies funktioniert
Gar nicht brauchen, string b = a ist.Ersetzen(@"\", @"\");
aber wie, wenn wir generieren einen dos-Befehl durch c# code... zB:- um eine Datei zu löschen
diese wil helfen,