替换指定位置或索引处的字符串值

时间:2014-08-05 12:15:55

标签: c# c#-4.0 c#-3.0

AM的文字为

图表类型:%s \ n非标准Visio项目将按如下方式转换:\ n \ tShapes:%s \ n \ tConnectors:%s

这里我需要用 text1 替换第一个%s,用 text2 替换第二个%s,用 text3 等替换第三个%s 。 有可能吗?如果可以的话怎么做?

2 个答案:

答案 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