Удалить последние символы из строки в C #.Элегантный способ? - PullRequest
84 голосов
/ 11 ноября 2011

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

Я сделал:

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

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

Ответы [ 9 ]

171 голосов
/ 11 ноября 2011

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

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

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

str = str.Remove(str.IndexOf(','));
15 голосов
/ 11 ноября 2011

Возможно, это:

str = str.Split(",").First();
6 голосов
/ 11 ноября 2011

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

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)

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

4 голосов
/ 11 ноября 2011
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")));
1 голос
/ 31 мая 2016

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

string var = var.Substring (0, var.LastIndexOf (','));

1 голос
/ 06 мая 2015

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

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)
  2. Скорость.
1 голос
/ 11 ноября 2011

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

"Name,".TrimEnd(',');
0 голосов
/ 13 января 2016

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

str = str.Split(',').Last();
0 голосов
/ 10 марта 2015

Использовать lastIndexOf.Нравится:

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