无法替换String Builder中的内容

时间:2011-10-29 09:50:52

标签: c# stringbuilder

我有两个字符串构建器,其中一个包含完整数据,另一个包含应该替换的数据,但我无法替换内容。

这是我写的代码

StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();

sb1.AppendLine("1111111111");
sb1.AppendLine("555555555");
sb1.AppendLine("666666660");
sb1.AppendLine("6666666601");
sb1.AppendLine("6666666602");
sb1.AppendLine("6666666603");
sb1.AppendLine("888888888");
sb1.AppendLine("99999999");
sb1.AppendLine("555555555");
sb1.AppendLine("666666661");
sb1.AppendLine("666666662");
sb1.AppendLine("666666663");
sb1.AppendLine("666666664");
sb1.AppendLine("888888888");
sb1.AppendLine("99999999");

sb2.AppendLine("6666666601");
sb2.AppendLine("666666661");

sb1 = sb1.Replace(sb2.ToString().TrimEnd(charRemove), "");
sb1 = sb1.Replace(sb2.ToString(), ""); // this also i tried

我想删除 sb2内容

2 个答案:

答案 0 :(得分:3)

您不得将StringBuilder用于sb2。

为简而言之,您要告诉.NET替换6666666601666666661中的sb1

尝试:

List<string> list2 = new List<string>();
list2.Append("6666666601")
list2.Append("666666661")

foreach (var str in list2)
{
    sb1.Replace(str + "\r\n", ""); // the \r\n are because you used `AppendLine`
}

(我甚至不确定你是否想要使用StringBuilder作为sb1。StringBuilder用于“组合”字符串,而不是“收集”它们。

请注意,这仍然是错误的错误!

用空行开始sb1会更好,如下所示:

sb1.AppendLine("");

这样你可以像这样替换:

sb1.Replace("\r\n" + str + "\r\n", "\r\n"); // the \r\n are because you used `AppendLine`

这样,99将不会1999,因为1999将是\r\n1999\r\n99将是\r\n99\r\n(我们在StringBuilder的开头添加一个空行,这样即使第一个元素前面还有\r\n。我们正在替换\r\n,因为我们匹配的是两个\r\n ,前一个和后一个,但必须保留其中一个。)

我想补充一点,也许您只是简单地将StringBuilder交换为string的集合,也许您想要这样做:

List<string> str1 = new List<string>();
str1.Add("555555555");
str1.Add("666666660");
str1.Add("6666666601");
str1.Add("666666661");

List<string> str2 = new List<string>();
str2.Add("6666666601");
str2.Add("666666661");

str1.RemoveAll(p => str2.Contains(p));

答案 1 :(得分:2)

sb1中的字符串不包含字符串"6666666601666666661",因此无需替换。

如果您要替换"6666666601"中保存的字符串中存在的两个字符串"666666661"sb1的所有实例,则应一次更换每个字符串。

string str1 = sb1.ToString();
str1 = str1.Replace("6666666601");
str1 = str1.Replace("666666661");