替换指定位置或索引处的字符串值
本文关键字:字符串 索引 定位 位置 替换 | 更新日期: 2023-09-27 18:16:41
我有一个文本
图表类型:%s'n非标准Visio项目将按以下方式转换:'n'tShapes: %s'n'tConnectors: %s
在这里,我需要将第一个%s替换为text1,第二个%s替换为text2,第三个%s替换为text3等。这可能吗?
你问如何使用字符串。格式在你的评论。这里有一个例子。如果这不是你需要的,我将在几分钟后再次更新。
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#格式。然后针对cSharpString
变量运行标准String.Format
并获得输出。
我认为您需要循环每次出现并依次使用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[] replacement = new string[] {"a", "b", "test"};字符串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
。