文字列内の二重引用符をエスケープする


173

二重引用符は次のようにエスケープできます。

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

しかし、これには"文字列に文字を追加することが含まれます。文字列を変更する必要がないように、二重引用符をエスケープするC#関数または他の方法はありますか?


5
「Hello World」はこのように使用できます
パンディアン

1
結果としてあなたは本当に何を望みますか?「文字列リテラルに」なり」。
ロエル

C / C ++の同様の質問(これが検索エンジンのトップヒットになる可能性があるため):文字列リテラルに二重引用符を付けるにはどうすればよいですか?
Peter Mortensen

回答:


225

番号。

そのままの文字列リテラルを使用するか、"バックスラッシュを使用してエスケープします。

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

文字列はどちらの場合も変更されていません-単一のエスケープ 文字が含まれています"。これは、文字が文字列の一部であり、文字列のターミネーターではないことをC#に伝える方法にすぎません。


81

どちらの方法でもバックスラッシュを使用できます。

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

印刷します。

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

これはまったく同じプリントです。

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

こちらがDEMOです。

" まだあなたの文字列の一部です。

チェックアウトEscape Sequencesし、String literalsMSDNから。


18

C#では、円記号を使用して文字列に特殊文字を付けることができます。たとえば、「を書くには、\」と書く必要があります。バックスラッシュを使用して書く文字はたくさんあります:バックスラッシュと数字:

  • \ 000 null
  • \ 010バックスペース
  • \ 011水平タブ
  • \ 012改行
  • \ 015キャリッジリターン
  • \ 032代用品
  • \ 042二重引用符
  • \ 047一重引用符
  • \ 134バックスラッシュ
  • \ 140グラーブアクセント

othe文字付きのバックスラッシュ

  • \ aベル(アラート)
  • \ bバックスペース
  • \ fフォームフィード
  • \ n改行
  • \ rキャリッジリターン
  • \ t水平タブ
  • \ v垂直タブ
  • \ '単一引用符
  • \ "二重引用符
  • \バックスラッシュ
  • \?文字通りの疑問符
  • \ ooo 8進表記のASCII文字
  • \ x hh 16進表記のASCII文字
  • \ x hhhhこのエスケープシーケンスがワイド文字定数またはUnicode文字列リテラルで使用されている場合、16進表記のUnicode文字。たとえば、WCHAR f = L '\ x4e00'またはWCHAR b [] = L "1の漢字は\ x4e00"です。

6

あなたは脱出を誤解しています。

余分な"文字は文字列リテラルの一部です。これらはコンパイラーによって単一 として解釈され"ます。

文字列の実際の値は、He said to me , "Hello World".How are you ?実行時に印刷するかどうかがわかるように、まだです。


4

問題について説明してください。あなたは言う:

ただし、これには文字列に文字 "を追加する必要があります。

それは何の問題ですか?を入力することはできませんstring foo = "Foo"bar"";。コンパイルエラーが発生するためです。用として追加の部分、事実ではない文字列サイズの点では:

@"""".Length == "\"".Length == 1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.