在字符串中间插入变量值

时间:2012-10-23 15:09:25

标签: c# string

在C#中:如果我想创建这样的消息: “嗨我们有这些航班:航班A,B,C,D。您想要哪一个”

其中只是粗体部分是动态的,我在运行时传递它的值,但它的左右部分是固定的。我可以创建像LeftMessage +那些变量+ RightMessage来创建它。 但我想知道是否有一种方法可以同时完成所有操作而无需创建两条单独的左右消息?

出于翻译目的,我将这些左右消息放在字符串资源中,所以现在我有两个单独的字符串资源。有没有办法一次完成所有操作?

6 个答案:

答案 0 :(得分:61)

现在(C#6,Visual Studio 2015)更简洁的方法:字符串插值。

来自another question's answer

  

在C#6中,您可以使用string interpolation

string name = "John";
string result = $"Hello {name}";
     

在Visual Studio中为此突出显示的语法使其高度重要   可读,并检查所有令牌。

答案 1 :(得分:35)

您可以使用string.Format

string template = "Hi We have these flights for you: {0}. Which one do you want";
string data = "A, B, C, D"
string message = string.Format(template, data);

您应该从资源文件中加载templatedata是您的运行时值。

如果您要翻译成多种语言,请务必小心:在某些情况下,您需要使用不同语言的不同令牌({0})。

答案 2 :(得分:25)

使用String.Format

Pre C#6.0

string data = "FlightA, B,C,D";
var str = String.Format("Hi We have these flights for you: {0}. Which one do you want?", data);

C#6.0 - String Interpolation

string data = "FlightA, B,C,D";
var str = $"Hi We have these flights for you: {data}. Which one do you want?";

http://www.informit.com/articles/article.aspx?p=2422807

答案 3 :(得分:11)

String.Format("Hi We have these flights for you: {0}. Which one do you want",
                              flights);

编辑: 您甚至可以单独保存“模板”字符串(例如,您可以将其存储在配置文件中并从那里检索),如下所示:

string flights = "Flight A, B,C,D";

string template = @"Hi We have these flights for you: {0}. Which one do you want";
Console.WriteLine(String.Format(template, flights));

EDIT2:哎呀,抱歉,我发现@DanPuzey已经提出了与我的编辑非常相似的东西(但更好)

答案 4 :(得分:2)

1您可以使用string.Replace方法

var sample = "testtesttesttest#replace#testtesttest";
var result = sample.Replace("#replace#", yourValue);

2您也可以使用string.Format

var result = string.Format("your right part {0} Your left Part", yourValue);

3您可以使用Regex类

答案 5 :(得分:0)

我将使用StringBuilder类进行字符串处理,因为它会更高效(可变)

string flights = "Flight A, B,C,D";
StringBuilder message = new StringBuilder();
message.Append("Hi We have these flights for you: ");
message.Append(flights);
message.Append(" . Which one do you want?");