AM的文字为
图表类型:%s \ n非标准Visio项目将按如下方式转换:\ n \ tShapes:%s \ n \ tConnectors:%s
这里我需要用 text1 替换第一个%s,用 text2 替换第二个%s,用 text3 等替换第三个%s 。 有可能吗?如果可以的话怎么做?
答案 0 :(得分:2)
您询问了如何在评论中使用String.Format。这是一个例子。如果这不是您需要的,我会在几分钟内再次更新。
string output = String.Format("Diagrams type: {0}\nNon-standard Visio items will be converted as follows:\n\tShapes: {1}\n\tConnectors: {2}", "SomeText 1", "Some More Text", "Even More Text");
这将用提供的顺序中的每个参数替换每个标记({N})。
如果您需要保留字符串的现有格式,可以使用以下方法:
Regex regex = new Regex(@"\%s\b.*");
string inputString = "Diagrams type: %s\nNon-standard Visio items will be converted as follows:\n\tShapes: %s\n\tConnectors: %s";
int i = 0;
string cSharpString = regex.Replace(inputString, match => { return String.Format("{{{0}}}", i++); });
string output = String.Format(cSharpString, "SomeText 1", "Some More Text", "Even More Text");
这样做是找到%s
的所有实例并用C#格式替换它们。然后,您针对String.Format
变量运行标准cSharpString
并获取输出。所有这些都不会改变您开始使用的字符串(如果您无法控制该字符串)
答案 1 :(得分:1)
我认为您需要循环每次出现并使用IndexOf
方法替换您依次找到的每个%s:
string[] replacements = new string[] { "text1", "text2", "text3" };
string test = "Diagrams type: %s\nNon-standard Visio items will be converted as follows:\n\tShapes: %s\n\tConnectors: %s";
int index = test.IndexOf("%s");
int occurance = 0;
while(index != -1)
{
//replace the occurance at index using substring
test = test.Substring(0, index) + replacements[occurance] + test.Substring(index + 2);
occurance++;
index = test.IndexOf("%s");
}
Console.WriteLine(test);
我不确定你将“text1”等存储在哪里,所以我把它们放在一个数组中,但你可以使用上面的occurance
变量从你需要的任何地方获取这些值。
修改强> @Rawling在关于上述效率低下的评论中提出了一个很好的观点。我使用上面的可读性,但通过一些简单的更改,我们可以删除画家行为的shlemiel:
string [] replacements = new string [] {“a”,“b”,“test”}; string test =“图表类型:%s \ n非标准Visio项目将按如下方式转换:\ n \ tShapes:%s \ n \ tConnectors:%s”; StringBuilder result = new StringBuilder();
int index = test.IndexOf("%s");
int occurance = 0;
while (index != -1)
{
result.Append(test.Substring(0, index));
result.Append(replacements[occurance]);
test = test.Substring(index + 2);
occurance++;
index = test.IndexOf("%s");
}
Console.WriteLine(result.ToString());
与上述类似,但我们正在缩小test
字符串的大小以搜索%s
,然后将我们找到的每个部分附加到StringBuilder
。