Видалити останній конкретний символ із рядка c #


87

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

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

Мені потрібно видалити останню кому в рядку. Тож як я можу його видалити?


16
Чому у вас такий string? Я припускаю, що через цикл, який об'єднує коми до ints. Ви можете використовувати string.Join(",", ints)замість цього. Це дозволяє уникнути перших коми.
Тім Шмельтер

Відповіді:


258

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

Something = Something.TrimEnd(',');

5
Це найкраще рішення, оскільки воно працює для всіх рядків, включаючи ситуації, коли ви не знаєте заздалегідь, ЯКЩО рядок насправді закінчується комою чи ні.
East of Nowhere

6
Ось чому я все ще шукаю рішення навіть для того, що б я міг легко написати самостійно. Хтось інший це зазвичай вирішив. :)
dpberry178,

1
Тож окремі лапки не були помилкою. Сьогодні я дізнався, що char та string визначаються відповідно з одинарними та подвійними лапками.
egmfrs

20

Відповідь короля Кінга, звичайно, правильна. Також коментар Тіма Шмельтера також є гарною порадою у вашій справі.

Але якщо ви дійсно хочете видалити останню кому з рядка , вам слід знайти індекс останньої коми і видалити like;

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

Вихід буде;

1,5,12,3412345

Тут a demonstration.

Дуже малоймовірно, що ви хочете таким чином, але я хочу вказати на це. І пам’ятайте, String.Removeметод не видаляє жодного символу з початкового рядка, він повертає новий рядок.


5

Спробуйте string.Remove();

string str = "1,5,12,34,";
string removecomma = str.Remove(str.Length-1);
MessageBox.Show(removecomma);

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 Array спочатку:

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

Тепер у вас є кожен персонаж indexed:

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

Пограйте навколо


1

Спробуйте нижче

Щось..TrimEnd (",". ToCharArray ());


0
Dim psValue As String = "1,5,12,34,123,12"
psValue = psValue.Substring(0, psValue.LastIndexOf(","))

вихід:

1,5,12,34,123

Питання було про C #, а не про VB.
metabuddy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.