如何插入字符串?


106

我想在C#中执行以下操作(来自Python背景):

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

如何将字符串内的令牌替换为字符串外的值?

Answers:



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))}");
帕特里克

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)。有些人定义了一种扩展方法,允许使用这种语法。


5

用途string.Format

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


1

您有2个选择。您可以使用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()当需要将格式应用于输出时(例如在数值上添加填充或前导零),此功能很有用。因此,String.Format()在循环中使用可能会实例化许多StringBuilders。在这种情况下,最好使用在循环外部和循环AppendFormat()内部声明的单个StringBuilder 。
大卫·克拉克


1

您可以使用以下方式

字符串插值

$特殊字符将字符串文字标识为插值字符串。例如

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

插值字符串是可能包含插值表达式的字符串文字。将插值字符串解析为结果字符串时,带有插值表达式的项目将由表达式结果的字符串表示形式替换。

字符串格式

如果需要将对象,变量或表达式的值插入另一个字符串,请使用String.Format。

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.