.NET の書式設定文字列の中括弧 (中括弧) をエスケープする方法
-
01-07-2019 - |
質問
使用時に括弧をエスケープするにはどうすればよいですか string.Format
. 。例えば:
String val = "1,2,3"
String.Format(" foo {{0}}", val);
この例では例外はスローされませんが、文字列が出力されます。 foo {0}
括弧をエスケープする方法はありますか?
解決
あなたがアウトプットするために foo {1, 2, 3}
次のようなことをする必要があります:
string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
を出力するには {
あなたが使う {{
そして出力するには }
あなたが使う }}
.
他のヒント
はい、出力します {
で string.Format
このようにして逃げなければなりません {{
したがって、この
String val = "1,2,3";
String.Format(" foo {{{0}}}", val);
出力します "foo {1,2,3}"
.
ただし、C# の設計上のバグについて知っておく必要があります。つまり、上記のロジックを実行すると、以下のコードが {24.00} を出力すると想定されることになります。
int i = 24;
string str = String.Format("{{{0:N}}}", i); //gives '{N}' instead of {24.00}
しかし、これは {N} を出力します。これは、C# がエスケープ シーケンスを解析して文字をフォーマットする方法が原因です。上記の場合に目的の値を取得するには、代わりにこれを使用する必要があります。
String.Format("{0}{1:N}{2}", "{", i, "}") //evaluates to {24.00}
もうすぐそこです!中括弧のエスケープシーケンスは次のとおりです。 {{
または }}
したがって、あなたの例では次のように使用します。
string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
二重開き括弧と二重閉じ括弧を使用すると、ページに括弧が 1 つだけ表示されます。
逃げる 中括弧 そして使用 文字列補間 興味深い挑戦になります。使用する必要があります 四重括弧 から逃れるために 文字列補間 解析と string.format
解析中。
エスケープブラケット:文字列補間 $("") と String.Format
string localVar = "dynamic";
string templateString = $@"<h2>{0}</h2><div>this is my {localVar} template using a {{{{custom tag}}}}</div>";
string result = string.Format(templateString, "String Interpolation");
// OUTPUT: <h2>String Interpolation</h2><div>this is my dynamic template using a {custom tag}</div>
C# で (クラス/オブジェクトをシリアル化せずに) json 文字列をアドホックに構築する方法を探してここに来ました。言い換えれば、使用中に中括弧と引用符をエスケープする方法 C# の補間文字列 そして "逐語的な文字列リテラル" ('@' プレフィックスが付いた二重引用符の文字列)、たとえば...
var json = $@"{{""name"":""{name}""}}";
[TestMethod]
public void BraceEscapingTest()
{
var result = String.Format("Foo {{0}}", "1,2,3"); //"1,2,3" is not parsed
Assert.AreEqual("Foo {0}", result);
result = String.Format("Foo {{{0}}}", "1,2,3");
Assert.AreEqual("Foo {1,2,3}", result);
result = String.Format("Foo {0} {{bar}}", "1,2,3");
Assert.AreEqual("Foo 1,2,3 {bar}", result);
result = String.Format("{{{0:N}}}", 24); //24 is not parsed, see @Guru Kara answer
Assert.AreEqual("{N}", result);
result = String.Format("{0}{1:N}{2}", "{", 24, "}");
Assert.AreEqual("{24.00}", result);
result = String.Format("{{{0}}}", 24.ToString("N"));
Assert.AreEqual("{24.00}", result);
}
または、次のように C# 文字列補間を使用することもできます (C# 6.0 で利用可能な機能)
var value = "1, 2, 3";
var output = $" foo {{{value}}}";
私の目標:
値を割り当てる必要がありました "{CR}{LF}"
に string
変数 delimiter
.
コードc#:
string delimiter= "{{CR}}{{LF}}";
注記:通常、特殊文字をエスケープするには、 を使用する必要があります。開始中括弧 { には、{{ のように 1 つ追加して使用します。閉じ中括弧 } には、追加の }} を 1 つ使用します。