Reputation: 25928
I want to do the following in C# (coming from a Python background):
strVar = "stack"
mystr = "This is %soverflow" % (strVar)
How do I replace the token inside the string with the value outside of it?
Upvotes: 117
Views: 58646
Reputation: 4963
You can use string interpolation
.
C# 6.0
string mystr = $"This is {strVar}overflow";
Upvotes: 11
Reputation: 1
You can now create an interpolated string not only with the $ sign, but also with €.
string name = "Michael";
string a = €"Hello, {name}!";
string b = $"Hello, {name}!";
Console.WriteLine(a == b); \/\/ True
The .NET XI version (.NET 11) also promises to introduce support for the £ symbol.
Upvotes: 0
Reputation: 5519
You can use the dollar sign and curl brackets.
Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.");
See doc here.
Upvotes: -1
Reputation: 1061
Basic example:
var name = "Vikas";
Console.WriteLine($"My name is {name}");
Adding Special characters:
string name = "John";
Console.WriteLine($"Hello, \"are you {name}?\", but not the terminator movie one :-{{");
//output-Hello, "are you John?", but not the terminator movie one :-{
Not just replacing token with value, You can do a lot more with string interpolation in C#
Evaluating Expression
Console.WriteLine($"The greater one is: { Math.Max(10, 20) }");
//output - The greater one is: 20
Method call
static void Main(string[] args)
{
Console.WriteLine($"The 5*5 is {MultipleByItSelf(5)}");
}
static int MultipleByItSelf(int num)
{
return num * num;
}
Source: String Interpolation in C# with examples
Upvotes: -1
Reputation: 2863
You can use the following way
String interpolation
The $ special character identifies a string literal as an interpolated string. e.g.
string name = "Mark";
string surname = "D'souza";
WriteLine($"Name :{name} Surname :{surname}" );//Name :Mark Surname :D'souza
An interpolated string is a string literal that might contain interpolated expressions. When an interpolated string is resolved to a result string, items with interpolated expressions are replaced by the string representations of the expression results.
String.Format
Use String.Format if you need to insert the value of an object, variable, or expression into another string.E.g.
WriteLine(String.Format("Name: {0}, Surname : {1}", name, surname));
Upvotes: 0
Reputation: 145
If you currently use Visual Studio 2015 with C# 6.0, try the following:
var strVar = "stack";
string str = $"This is {strVar} OverFlow";
that feature is called string interpolation.
Upvotes: 12
Reputation: 1106
There's one more way to implement placeholders with string.Replace, oddly helps in certain situations:
mystr = mystr.Replace("%soverflow", strVar);
Upvotes: 0
Reputation: 61589
Use string.Format
:
string mystr = string.Format("This is {0}overflow", "stack");
Upvotes: 5
Reputation: 1038720
string mystr = string.Format("This is {0}overflow", strVar);
And you could also use named parameters instead of indexes.
Upvotes: 85
Reputation: 4423
This has been added as of C# 6.0 (Visual Studio 2015+).
Example:
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!"
This is syntactic sugar for:
var formattedStr = String.Format("Hello planet {0}, my name is {1}!", planetName, myName);
Additional Resources:
String Interpolation for C# (v2) Discussion
Upvotes: 285
Reputation: 727
You can accomplish this with Expansive: https://github.com/anderly/Expansive
Upvotes: 0
Reputation: 13256
You can use string.Format
to drop values into strings:
private static readonly string formatString = "This is {0}overflow";
...
var strVar = "stack";
var myStr = string.Format(formatString, "stack");
An alternative is to use the C# concatenation operator:
var strVar = "stack";
var myStr = "This is " + strVar + "overflow";
If you're doing a lot of concatenations use the StringBuilder
class which is more efficient:
var strVar = "stack";
var stringBuilder = new StringBuilder("This is ");
for (;;)
{
stringBuilder.Append(strVar); // spot the deliberate mistake ;-)
}
stringBuilder.Append("overflow");
var myStr = stringBuilder.ToString();
Upvotes: 14
Reputation: 19
You have 2 options. You can either use String.Format or you can use the concatenation operator.
String newString = String.Format("I inserted this string {0} into this one", oldstring);
OR
String newString = "I inserted this string " + oldstring + " into this one";
Upvotes: 1
Reputation: 3097
You should be using String.Format()
. The syntax is a bit different, numerical placeholders are used instead.
Example:
String.Format("item {0}, item {1}", "one", "two")
Have a look at http://msdn.microsoft.com/en-us/library/system.string.format.aspx for more details.
Upvotes: 4
Reputation: 16096
Use:
strVar = "stack"
mystr = String.Format("This is {0}", strVar);
Upvotes: 0
Reputation: 108790
There is no operator for that. You need to use string.Format
.
string strVar = "stack";
string mystr = string.Format("This is {0}soverflow", strVar);
Unfortunately string.Format
is a static method, so you can't simply write "This is {0}soverflow".Format(strVar)
. Some people have defined an extension method, that allows this syntax.
Upvotes: 6