.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}
참고 기사문자열.형식 고정 그리고문자열 형식 FAQ
거의 다 왔어!중괄호의 이스케이프 시퀀스는 다음과 같습니다. {{
또는 }}
귀하의 예에서는 다음을 사용합니다.
string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
페이지에 하나의 괄호만 표시하는 이중 여는 괄호와 이중 닫는 괄호를 사용할 수 있습니다.
탈출 중괄호 그리고 사용 문자열 보간 흥미로운 도전을 하게 만듭니다.당신은 사용해야합니다 4중 괄호 탈출하기 위해 문자열 보간 구문 분석 및 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}}";
메모:일반적으로 특수 문자를 이스케이프하려면 를 사용해야 합니다.중괄호 {를 열려면 {{와 같은 추가 항목을 사용하세요.중괄호 }를 닫으려면 하나의 추가 }}를 사용하세요.