Удалить последний символ строки - PullRequest
230 голосов
/ 26 октября 2011

Я получаю много информации в списке, связанном с базой данных, и я хочу создать строку групп для тех, кто подключен к веб-сайту.

Я использую это для проверки, но этоне является динамическим, так что это действительно плохо:

string strgroupids = "6";

Я хочу использовать это сейчас.Но возвращаемая строка выглядит примерно так: 1,2,3,4,5,

groupIds.ForEach((g) =>
{
    strgroupids = strgroupids  + g.ToString() + ",";
    strgroupids.TrimEnd(',');
});

strgroupids.TrimEnd(new char[] { ',' });

Я хочу удалить , после 5, но она определенно не работает.

Ответы [ 9 ]

540 голосов
/ 26 октября 2011
strgroupids = strgroupids.Remove(strgroupids.Length - 1);

MSDN:

String.Remove (Int32):

Удаляет все символы из начала этой строкив указанной позиции и продолжая до последней позиции

78 голосов
/ 26 октября 2011

А как насчет этого?

strgroupids = string.Join( ",", groupIds );

A лот очиститель.

Он добавит все элементы внутри groupIds с ',' между каждым, но он не поставит ',' в конце.

25 голосов
/ 26 октября 2011

Строки в c # являются неизменяемыми.Когда в вашем коде вы делаете strgroupids.TrimEnd(','); или strgroupids.TrimEnd(new char[] { ',' });, строка strgroupids не изменяется .

Вам нужно сделать что-то вроде strgroupids = strgroupids.TrimEnd(',');.

Цитировать здесь :

Строки являются неизменяемыми - содержимое объекта строки не может быть изменено после создания объекта, хотя синтаксис заставляет его выглядеть так, как если бы вымогу сделать это.Например, когда вы пишете этот код, компилятор фактически создает новый строковый объект для хранения новой последовательности символов, и этот новый объект назначается для b.Строка "h" тогда подходит для сборки мусора.

9 голосов
/ 09 июня 2014

Добавить метод расширения.

public static string RemoveLast(this string text, string character)
{
    if(text.Length < 1) return text;
    return text.Remove(text.ToString().LastIndexOf(character), character.Length);
}

затем используйте:

yourString.RemoveLast(",");
6 голосов
/ 26 октября 2011

Удаляет все запятые:

while (strgroupids.EndsWith(","))
    strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);

Это наоборот, вы написали код, который добавляет запятую в первую очередь. Вместо этого вы должны использовать string.Join(",",g), предполагая, что g - это string[]. Дайте ему лучшее имя, чем g тоже!

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

В качестве альтернативы добавлению запятой для каждого элемента вы можете просто использовать String.Join:

var strgroupids = String.Join(",",  groupIds);

Это добавит разделитель (в данном случае ",") между каждый элемент в массиве.

3 голосов
/ 26 октября 2011
string strgroupids = string.Empty;

groupIds.ForEach(g =>
{
    strgroupids = strgroupids + g.ToString() + ",";
});

strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);

Обратите внимание, что использование ForEach здесь обычно считается "неправильным" (прочитайте, например, http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx)

Использование некоторых LINQ:

string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => p + q + ',');
strgroupids = strgroupids.Substring(0, str1.Length - 1);

Без концаподстрока:

string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => (p != string.Empty ? p + "," + q : q.ToString()));
2 голосов
/ 16 сентября 2015

string.Join лучше, но если вы действительно хотите LINQ ForEach:

var strgroupids = string.Empty;

groupIds.ForEach(g =>
{
    if(strgroupids != string.Empty){
        strgroupids += ",";
    }

    strgroupids += g;
});

Некоторые заметки:

  • string.Join и foreach оба лучше, чем этот, гораздо медленнее, подход
  • Нет необходимости удалять последний ,, так как он никогда не добавляется
  • Оператор приращения (+=) удобен для добавления в строки
  • .ToString() не требуется, так как он вызывается автоматически при объединении не-строк
  • При обработке больших строк следует рассматривать StringBuilder вместо конкатенации строк
1 голос
/ 22 ноября 2013

Дополнительно к решению sll: лучше обрезать строку, если в конце есть несколько пробелов.

strgroupids = strgroupids.Remove(strgroupids.Trim().Length - 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...