Лучший способ удалить последний символ из строки, построенной с помощью stringbuilder
У меня есть следующее
data.AppendFormat("{0},",dataToAppend);
Проблема с этим заключается в том, что я использую его в цикле, и там будет пробная запятая. Каков наилучший способ удалить конечную запятую?
Нужно ли мне изменять данные в строку подстрокой?
Ответы
Ответ 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)
Ответ 10
Подобный вопрос SO здесь.
Мне понравилось использование метода расширения StringBuilder.
Метод RemoveLast
Ответ 11
Самый простой способ - использовать метод Join():
public static void Trail()
{
var list = new List<string> { "lala", "lulu", "lele" };
var data = string.Join(",", list);
}
Если вам действительно нужен StringBuilder, обрезайте конечную запятую после цикла:
data.ToString().TrimEnd(',');