Невозможно заменить содержимое в String Builder - PullRequest
0 голосов
/ 29 октября 2011

У меня есть два строителя строк, в которых один хранит полные данные, а другой содержит данные, которые должны быть заменены, но я не могу заменить содержимое.

Это код, который я написал

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 ]

3 голосов
/ 29 октября 2011

Вы не должны использовать 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, потому что мы сопоставляем TWO \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));
2 голосов
/ 29 октября 2011

Строка, содержащаяся в sb1, не содержит строку "6666666601666666661", поэтому заменять нечего.

Если вы пытаетесь заменить все экземпляры двух строк "6666666601" и "666666661", которые существуют в строке, содержащейся в sb1, вы должны заменять каждую по очереди.

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