c# string.split - كيفية الهروب الأقواس(الأقواس المتعرجة)في سلسلة التنسيق في.NET




how to (9)

جئت هنا للبحث عن كيفية بناء سلاسل json ad-hoc (بدون إجراء تسلسل لفئة / كائن) في C #. وبعبارة أخرى ، كيفية الهروب من الأقواس والاقتباسات أثناء استخدام سلاسل Interpolated في C # و " حرفيّة السلسلة الحرفية " (سلاسل مقتبسة مزدوجة مع البادئة "@") ، مثل ...

var json = [email protected]"{{""name"":""{name}""}}";

كيف يمكن الهروب بين قوسين في استخدام 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);

لإخراج { استخدم {{ وإخراج a } تستخدم }} .


[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);
}

نعم للإخراج { in 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}

لكن هذا يطبع {ن}. هذا لأن الطريقة C # يفرز تسلسلات الهروب وتنسيق الأحرف. للحصول على القيمة المطلوبة في الحالة المذكورة أعلاه ، يجب عليك استخدام هذا بدلاً من ذلك.

String.Format("{0}{1:N}{2}", "{", i, "}") //evaluates to {24.00}

المقالات المرجعية String.Format gottach والأسئلة الشائعة حول تنسيق السلسلة


يمكنك استخدام الأقواس المفتوحة المزدوجة وأقواس الإغلاق المزدوجة التي ستعرض قوسًا واحدًا فقط على صفحتك.


مجرد تكرار الدعامة وهذا كل شيء.

{=> {{

} =>}}


الهروب من الأقواس المتعرجة واستخدام سلسلة الاستيفاء يجعل تحديًا مثيرًا للاهتمام. تحتاج إلى استخدام الأقواس الرباعية للهروب من تحليل الاستيفاء سلسلة و string.format .

الهروب بين قوسين: سلسلة الاستيفاء $ ("") و String.Format

string localVar = "dynamic";
string templateString = [email protected]"<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 # string string مثل هذا (الميزة المتوفرة في C # 6.0)

var value = "1, 2, 3";
var output = $" foo {{{value}}}";

مستخدمو Kotlin يقومون ببساطة بما يلي:

println(InputStreamReader(is).readText())

بينما

readText()

هي طريقة التمديد المدمجة في مكتبة Kotlin القياسية.





c# .net string parsing formatting