문자열을 어떻게 보간합니까?


106

C #에서 다음을 수행하고 싶습니다 (Python 배경에서 제공됨).

strVar = "stack"
mystr  = "This is %soverflow" % (strVar)

문자열 내부의 토큰을 외부 값으로 어떻게 대체합니까?

답변:



270

이것은 C # 6.0 (Visual Studio 2015+)부터 추가되었습니다.

예:

var planetName = "Bob";
var myName = "Ford"; 
var formattedStr = $"Hello planet {planetName}, my name is {myName}!";
// formattedStr should be "Hello planet Bob, my name is Ford!"

이것은 다음에 대한 구문 설탕입니다.

var formattedStr = String.Format("Hello planet {0}, my name is {1}!", planetName, myName);

추가 자료 :

C # (v2) 토론을위한 문자열 보간

C # 6.0 언어 미리보기


모노 패치 (2009 년 날짜, 마일리지는 다를 수 있음) tirania.org/blog/archive/2009/Dec-20.html
Jefferey Cave


이 기능은 정말 아름다운 것입니다. 특히 VS2015 및 편집기 지원을 통해 보간 된 문자열을 명확하게보고 지능을 얻을 수 있습니다. 메서드에서도 작동합니다! $("This feature is {GetDescription(FEATURE_AMAZING))}");
Patrick

14

string.Format값을 문자열에 드롭 하는 데 사용할 수 있습니다 .

private static readonly string formatString = "This is {0}overflow";
...
var strVar = "stack";
var myStr = string.Format(formatString, "stack");

대안은 C # 연결 연산자를 사용하는 것입니다.

var strVar = "stack";
var myStr = "This is " + strVar + "overflow";

많은 연결을 수행하는 경우 StringBuilder더 효율적인 클래스를 사용하십시오 .

var strVar = "stack";
var stringBuilder = new StringBuilder("This is ");
for (;;)
{
    stringBuilder.Append(strVar); // spot the deliberate mistake ;-)
}
stringBuilder.Append("overflow");
var myStr = stringBuilder.ToString();


12

현재 Visual Studio 2015를 C # 6.0과 함께 사용하는 경우 다음을 시도해보세요.

var strVar = "stack";

string str = $"This is {strVar} OverFlow";

이 기능을 문자열 보간이라고합니다.


6

그것에 대한 운영자가 없습니다. 을 사용해야 string.Format합니다.

string strVar = "stack";
string mystr  = string.Format("This is {0}soverflow", strVar);

불행히도 string.Format정적 메서드이므로 단순히 "This is {0}soverflow".Format(strVar). 어떤 사람들은이 구문을 허용하는 확장 방법을 정의했습니다.




1

두 가지 옵션이 있습니다. String.Format을 사용하거나 연결 연산자를 사용할 수 있습니다.

String newString = String.Format("I inserted this string {0} into this one", oldstring);

또는

String newString = "I inserted this string " + oldstring + " into this one";

내부적으로 String.Format()모두 StringBuilder를 사용합니다. StringBuilder는 일반적으로 많은 문자열을 연결할 때 더 효율적이지만 연결 연산자는 일회성에 적합합니다. String.Format()숫자 값에 패딩 또는 선행 0을 추가하는 것과 같이 출력에 서식을 적용해야 할 때 유용합니다. 따라서 String.Format()루프에서 사용 하면 잠재적으로 많은 StringBuilder를 인스턴스화 할 수 있습니다. 이 경우 루프 외부와 루프 AppendFormat()내부에 선언 된 단일 StringBuilder를 사용하는 것이 좋습니다 .
David Clarke

1

string.Replace를 사용하여 자리 표시자를 구현하는 한 가지 방법이 더 있습니다.

mystr = mystr.Replace("%soverflow", strVar);

1

다음과 같은 방법으로 사용할 수 있습니다.

문자열 보간

$ 특수 문자는 문자열 리터럴을 보간 된 문자열로 식별합니다. 예 :

string name = "Mark";
string surname = "D'souza";
WriteLine($"Name :{name} Surname :{surname}" );//Name :Mark Surname :D'souza  

보간 된 문자열은 보간 된 표현식을 포함 할 수있는 문자열 리터럴입니다. 보간 된 문자열이 결과 문자열로 해석되면 보간 된 표현식이있는 항목은 표현식 결과의 문자열 표현으로 대체됩니다.

String.Format

객체, 변수 또는 표현식의 값을 다른 문자열에 삽입해야하는 경우 String.Format을 사용합니다.

WriteLine(String.Format("Name: {0}, Surname : {1}", name, surname));

0

사용하다:

strVar = "stack"
mystr  = String.Format("This is {0}", strVar);

0

Expansive : https://github.com/anderly/Expansive 로이를 수행 할 수 있습니다.


C #에는 내장 된 보간 메커니즘이 있습니다. 이 기능을 위해 라이브러리를 포함 할 이유가 전혀 없습니다.
표시 이름

2
@Displayname은 질문의 날짜를 봅니다. C #에는 항상 기본 제공 문자열 보간이있는 것은 아닙니다. 그것은 2016 년에 C # 6에 추가되었습니다. 따라서 2014 년에 제가 답변 한 이유입니다.
anderly
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.