Удалить последние символы из строки в C#. Элегантный способ?


у меня есть строка вроде этой 2223,00. Я хотел бы преобразовать его в 2223. Это: без информации после",". Предположим, что останется только два десятичных знаков после ",".

Я:

str = str.Remove(str.Length - 3, 3);

есть ли более элегантное решение? Может быть с помощью другой функции? -Я не люблю ставить явные цифры -

9 79

9 ответов:

вы можете просто использовать удалить перегрузку, которая принимает один параметр:

str = str.Remove(str.Length - 3);

однако, если вы пытаетесь избежать жесткого кодирования длины, вы можете использовать:

str = str.Remove(str.IndexOf(','));

пожалуй, вот это:

str = str.Split(",").First();

это вернет вам строку, исключающую все после запятой

str = str.Substring(0, str.IndexOf(','));

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

commaPos = str.IndexOf(',');
if(commaPos != -1)
    str = str.Substring(0, commaPos)

Я предполагаю, что вы работаете со строкой для начала. В идеале, если вы работаете с числом для начала, как поплавок или двойной, вы можете просто бросить его в int, то ли myInt.ToString() например:

myInt = (int)double.Parse(myString)

это анализирует двойной, используя текущую культуру (здесь, в США, мы используем . для десятичной точки). Однако это снова предполагает, что ваша входная строка может быть проанализирована.

String.Format("{0:0}", 123.4567);      // "123"

если ваше начальное значение десятичное в строку, вам нужно будет преобразовать

String.Format("{0:0}", double.Parse("3.5", CultureInfo.InvariantCulture))  //3.5

в этом примере я выбираю инвариантного но вы можете использовать тот, который вы хотите.

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

редактировать: вы также можете использовать Truncate удалить все после , или .

Console.WriteLine(Decimal.Truncate(Convert.ToDecimal("3,5")));

можно использовать TrimEnd. Он также эффективен и выглядит чистым.

"Name,".TrimEnd(',');

использование:

public static class StringExtensions
{
    /// <summary>
    /// Cut End. "12".SubstringFromEnd(1) -> "1"
    /// </summary>
    public static string SubstringFromEnd(this string value, int startindex)
    {
        if (string.IsNullOrEmpty(value)) return value;
        return value.Substring(0, value.Length - startindex);
    }
}

Я предпочитаю метод расширения здесь по двум причинам:

  1. Я могу связать его с подстрокой. Example: f1.Substring(directorypathLength).SubstringFromEnd(1)

вы можете использовать LastIndexOf и подстроку вместе, чтобы получить все символы слева от последнего индекса запятой в sting.

строка var = var.Подстрока(0, ВАР.LastIndexOf(','));

попробуйте следующее. Это сработало для меня:

str = str.Split(',').Last();

использовать lastIndexOf. Например:

string var = var.lastIndexOf(',');