Удалить последний конкретный символ в строке с #

87

Я использую WinForms c #. У меня строковое значение, как показано ниже,

string Something = "1,5,12,34,";

Мне нужно удалить последнюю запятую в строке. Итак, как я могу его удалить?

user3042186
источник
16
Зачем тебе такой string? Я предполагаю из-за цикла, который объединяет запятые с ints. string.Join(",", ints)Вместо этого можно использовать . Это в первую очередь позволяет избежать запятых в конце.
Тим Шмелтер

Ответы:

258

Попробуйте string.TrimEnd():

Something = Something.TrimEnd(',');
Король король
источник
5
Это лучшее решение, потому что оно работает для всех строк, включая ситуации, когда вы не знаете заранее, действительно ли строка заканчивается запятой или нет.
East of Nowhere
6
Вот почему я все еще ищу решения даже для вещей, которые мог бы легко написать сам. Обычно это решает кто-то другой. :)
dpberry178
1
Так что одинарные кавычки не были ошибкой. Сегодня я узнал, что символы char и string определяются с помощью одинарных и двойных кавычек соответственно.
egmfrs
20

Ответ Короля Кинга, конечно же, правильный. Также комментарий Тима Шмелтера также является хорошим предложением в вашем случае.

Но если вы действительно хотите удалить последнюю запятую в строке , вы должны найти индекс последней запятой и удалить подобное;

string s = "1,5,12,34,12345";
int index = s.LastIndexOf(',');
Console.WriteLine(s.Remove(index, 1));

Выход будет;

1,5,12,3412345

Здесь а demonstration.

Слишком маловероятно, что вы захотите этого, но я хочу указать на это. И помните, String.Removeметод не удаляет символы в исходной строке, он возвращает новую строку.

Сонер Генюль
источник
5

Пытаться string.Remove();

string str = "1,5,12,34,";
string removecomma = str.Remove(str.Length-1);
MessageBox.Show(removecomma);
shA.t
источник
3

Метод TrimEnd принимает массив входных символов, а не строку. Приведенный ниже код из Dot Net Perls показывает более эффективный пример того, как выполнять те же функции, что и TrimEnd.

static string TrimTrailingChars(string value)
{
    int removeLength = 0;
    for (int i = value.Length - 1; i >= 0; i--)
    {
        char let = value[i];
        if (let == '?' || let == '!' || let == '.')
        {
            removeLength++;
        }
        else
        {
            break;
        }
    }
    if (removeLength > 0)
    {
        return value.Substring(0, value.Length - removeLength);
    }
    return value;
}
баю
источник
1

Или вы можете сначала преобразовать его в массив Char:

string Something = "1,5,12,34,";
char[] SomeGoodThing=Something.ToCharArray[];

Теперь у вас есть каждый персонаж indexed:

SomeGoodThing[0] -> '1'
SomeGoodThing[1] -> ','

Поиграйте с этим

Фейсал Ашфак
источник
1

Попробуйте ниже

Что-то..TrimEnd (",". ToCharArray ());

pmh
источник
0
Dim psValue As String = "1,5,12,34,123,12"
psValue = psValue.Substring(0, psValue.LastIndexOf(","))

выход:

1,5,12,34,123
nambi_r88
источник
Вопрос касался C #, а не VB.
Metabuddy