Подтвердить что ты не робот

Лучший способ удалить последний символ из строки, построенной с помощью stringbuilder

У меня есть следующее

data.AppendFormat("{0},",dataToAppend);

Проблема с этим заключается в том, что я использую его в цикле, и там будет пробная запятая. Каков наилучший способ удалить конечную запятую?

Нужно ли мне изменять данные в строку подстрокой?

4b9b3361

Ответ 1

Простейшим и наиболее эффективным способом является выполнение этой команды:

data.Length--;

сделав это, вы переместите указатель (т.е. последний индекс) обратно на один символ, но вы не изменяете изменчивость объекта. Фактически, очистка a StringBuilder лучше всего делать с помощью Length (но на самом деле использовать метод Clear() для ясности вместо этого, потому что это похоже на его реализацию):

data.Length = 0;

снова, поскольку он не меняет таблицу распределения. Подумайте об этом, как сказать, я больше не хочу распознавать эти байты. Теперь даже при вызове ToString() он не узнает ничего за его Length, ну, он не может. Это изменяемый объект, который выделяет больше места, чем тот, который вы ему предоставляете, он просто построен таким образом.

Ответ 2

Просто используйте

string.Join(",", yourCollection)

Таким образом вам не нужен StringBuilder и цикл.

Ответ 3

После цикла используйте следующее.

.TrimEnd(',')

или просто измените на

string commaSeparatedList = input.Aggregate((a, x) => a + ", " + x)

Ответ 4

Как об этом..

string str = "The quick brown fox jumps over the lazy dog,";
StringBuilder sb = new StringBuilder(str);
sb.Remove(str.Length - 1, 1);

Ответ 5

Я предпочитаю манипулировать длиной stringbuilder:

data.Length = data.Length - 1;

Ответ 6

Я рекомендую вам изменить алгоритм цикла:

  • Добавить запятую не после пункта, но ПЕРЕД
  • Используйте логическую переменную, которая начинается с false, блокирует первую запятую
  • Установите эту логическую переменную в значение true после ее тестирования

Ответ 7

Вы должны использовать метод string.Join, чтобы превратить коллекцию элементов в строку с разделителями-запятыми. Это гарантирует, что нет ведущей или конечной запятой, а также убедитесь, что строка построена эффективно (без ненужных промежуточных строк).

Ответ 8

Да, преобразуйте его в строку после завершения цикла:

String str = data.ToString().TrimEnd(',');

Ответ 9

У вас есть два варианта. Первый - очень простой метод Remove, он достаточно эффективен. Второй способ - использовать ToString с индексом начала и конца индекса (документация MSDN)

Ответ 11

Самый простой способ - использовать метод Join():

public static void Trail()
{
    var list = new List<string> { "lala", "lulu", "lele" };
    var data = string.Join(",", list);
}

Если вам действительно нужен StringBuilder, обрезайте конечную запятую после цикла:

data.ToString().TrimEnd(',');