我有两个字符串构建器,其中一个包含完整数据,另一个包含应该替换的数据,但我无法替换内容。
这是我写的代码
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
内容
答案 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\n
而99
将是\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");