Я использую WinForms NET 2.0. Я кодирую небольшую функцию, чтобы обрезать комментарии из некоторого выделенного текста. Для этого выделенный текст разбивается на отдельные строки, а затем:
- Если строка не содержит комментариев, она добавляется.
- Если в строке содержится какой-то текст, за которым следуют комментарии, к нему добавляются обрезанные комментарии.
- Если строка начинается с комментария, она не добавляется. Это в операторе if.
- Если строка пуста, она не добавляется. Это также в операторе if.
Вот мой код:
string[] lines = tb.SelectedText.Split('\n');
StringBuilder sb = new StringBuilder();
for (int i = 0; i < lines.Length; i++)
{
if ((lines[i].Trim() != string.Empty) || !Regex.IsMatch(lines[i], @"^\s*;(.*)$"))
{
if (Regex.IsMatch(lines[i], @"^(.*);(.*)$"))
sb.AppendLine(lines[i].Substring(0, lines[i].IndexOf(';')).Trim());
else
sb.AppendLine(lines[i]);
}
}
tb.SelectedText = sb.ToString();
Проблема в том, что она работает не так, как задумано. Предположим, у меня есть следующий текст:
test ;test
test2 ;test
Я ожидал бы, что это обрежет комментарии и удалит пустую строку, но нет, пустая строка все еще там. Почему это? Я проверил, была ли строка пустой, поэтому StringBuilder не должен добавлять строку, если она пустая, но по какой-то причине это происходит.
Кроме того, по какой-то причине строитель строк добавляет дополнительную строку. Как от этого избавиться?