Escape doppelte Anführungszeichen in einer Zeichenfolge

173

Doppelte Anführungszeichen können wie folgt maskiert werden:

string test = @"He said to me, ""Hello World"". How are you?";

Dies beinhaltet jedoch das Hinzufügen von Zeichen "zur Zeichenfolge. Gibt es eine C # -Funktion oder eine andere Methode, um doppelte Anführungszeichen zu umgehen, sodass keine Änderung der Zeichenfolge erforderlich ist?

Mudassir Hasan
quelle
5
Sie können "Hallo Welt" wie
folgt verwenden
1
Was willst du wirklich als Ergebnis? "" wird "in einer wörtlichen Zeichenfolge.
Roel
Eine ähnliche Frage für C / C ++ (da dies möglicherweise der Top-Suchmaschinen-Hit ist): Wie kann ich doppelte Anführungszeichen in ein String-Literal einfügen?
Peter Mortensen

Antworten:

225

Nein.

Verwenden Sie entweder wörtliche Zeichenfolgenliterale wie Sie oder vermeiden Sie den "Backslash.

string test = "He said to me, \"Hello World\" . How are you?";

Der String ist nicht in jedem Fall verändert - es ist ein einziger entkam " darin. Dies ist nur eine Möglichkeit, C # mitzuteilen, dass das Zeichen Teil der Zeichenfolge und kein Zeichenfolgenabschluss ist.

Oded
quelle
81

Sie können den Backslash in beiden Fällen verwenden.

string str = "He said to me, \"Hello World\". How are you?";

Es druckt;

He said to me, "Hello World". How are you?

das ist genau das gleiche druckt mit;

string str = @"He said to me, ""Hello World"". How are you?";

Hier ist ein DEMO.

" ist immer noch Teil Ihrer Zeichenfolge.

Auschecken Escape Sequencesund String literalsvon MSDN.

Soner Gönül
quelle
18

In C # können Sie den Backslash verwenden, um Ihrer Zeichenfolge Sonderzeichen hinzuzufügen. Um beispielsweise "zu setzen, müssen Sie \" schreiben. Es gibt viele Zeichen, die Sie mit dem Backslash schreiben: Backslash mit einer Zahl:

  • \ 000 null
  • \ 010 Rücktaste
  • \ 011 horizontale Registerkarte
  • \ 012 neue Zeile
  • \ 015 Wagenrücklauf
  • \ 032 Ersatz
  • \ 042 doppeltes Anführungszeichen
  • \ 047 einfaches Anführungszeichen
  • \ 134 Backslash
  • Schwerer Akzent

Backslash mit dem anderen Charakter

  • \ a Bell (Alarm)
  • \ b Rücktaste
  • \ f Formfeed
  • \ n Neue Zeile
  • Wagenrücklauf
  • \ t Registerkarte "Horizontal"
  • \ v Registerkarte "Vertikal"
  • \ 'Einfaches Anführungszeichen
  • "Doppeltes Anführungszeichen
  • \ Backslash
  • \? Buchstäbliches Fragezeichen
  • \ ooo ASCII-Zeichen in Oktalschreibweise
  • \ x hh ASCII-Zeichen in hexadezimaler Notation
  • \ x hhhh Unicode-Zeichen in hexadezimaler Notation, wenn diese Escape-Sequenz in einer Konstante mit breiten Zeichen oder einem Unicode-Zeichenfolgenliteral verwendet wird. Beispiel: WCHAR f = L '\ x4e00' oder WCHAR b [] = L "Das chinesische Zeichen für eins ist \ x4e00".
Daniel Antokoletz
quelle
6

Du missverstehst die Flucht.

Die zusätzlichen "Zeichen sind Teil des Zeichenfolgenliteral. Sie werden vom Compiler als Single interpretiert ".

Der tatsächliche Wert Ihrer Zeichenfolge bleibt erhalten He said to me , "Hello World".How are you ?, da Sie sehen werden, ob Sie sie zur Laufzeit drucken.

SLaks
quelle
4

Bitte erläutern Sie Ihr Problem. Du sagst:

Dazu muss jedoch der Zeichenfolge ein Zeichen "hinzugefügt werden.

Welches Problem ist das? Sie können nicht eingeben string foo = "Foo"bar"";, da dies einen Kompilierungsfehler hervorruft. Was das Hinzufügen von Teilen betrifft , so ist dies in Bezug auf die Zeichenfolgengröße nicht wahr:

@"""".Length == "\"".Length == 1
CodeCaster
quelle