我有一个字符串,我想替换它的一部分。 棘手的部分是我不能使用Regex.replace,因为我只知道字符串中数据的开始和结束位置。 例如,如果字符串如下所示:
I love cats, some more stuff here, we dont know how much more
我有start=8
和end=11
。我想把那部分替换成我需要的东西。这一次让我们说dogs
所以新字符串将如下所示:
I love dogs, some more stuff here, we dont know how much more
我怎么能这样做?
答案 0 :(得分:21)
最简单的方法:
string replaced = original.Substring(0, start) + replacementText +
original.Substring(end);
我原本期望StringBuilder
能够做到这一点,但我认为你必须先致电Remove
然后Insert
。
答案 1 :(得分:6)
str.Substring(0, 8) + "replacement" + str.Substring(11);
它并不“优雅”,但它有效。
答案 2 :(得分:1)
ReplaceAt(int index,int length,string replace)
这是一个不使用StringBuilder或Substring的扩展方法。此方法还允许替换字符串延伸超过源字符串的长度。
//// str - the source string
//// index- the start location to replace at (0-based)
//// length - the number of characters to be removed before inserting
//// replace - the string that is replacing characters
public static string ReplaceAt(this string str, int index, int length, string replace)
{
return str.Remove(index, Math.Min(length, str.Length - index))
.Insert(index, replace);
}
使用此函数时,如果希望整个替换字符串替换尽可能多的字符,则将length设置为替换字符串的长度:
"0123456789".ReplaceAt(7, 5, "Salut") = "0123456Salut"
否则,您可以指定要删除的字符数量:
"0123456789".ReplaceAt(2, 2, "Salut") = "01Salut456789"
如果指定长度为0,则此函数的作用与插入函数类似:
"0123456789".ReplaceAt(4, 0, "Salut") = "0123Salut456789"
我想这更有效率,因为StringBuilder类不需要初始化,因为它使用更多的基本操作。 希望这个帮助
答案 3 :(得分:0)
string newString =
String.Concat(
originalString.Substring(0, start),
replacementText,
originalString.Substring(end));
OR
StringBuilder sb = new StringBuilder(originalString);
sb
.Remove(start, length)
.Insert(start, replacementText);
答案 4 :(得分:0)
只是为了LINQ的乐趣:
const string S = "I love cats, some more stuff here, we dont know how much more";
const string Dogs = "dogs";
var res = S
.Take(7)
.Concat(Dogs)
.Concat(S.Where((c, i) => i > 10));
var resultString = string.Concat(res);
答案 5 :(得分:0)
不优雅但有趣的解决方案:
string myString = "I love cats, some more stuff here, we dont know how much more";
Regex expr = new Regex("cats");
int start = 8;
int end = 11;
Match m =expr.Match(myString);
if (m.Index == start-1 && m.Length == end - (start-1))
{
Console.WriteLine(expr.Replace(myString, "dogs"));
}