从C#中的字符串中删除最后一个字符。优雅的方式?

时间:2011-11-11 18:51:03

标签: c# .net string

我有一个像2223,00这样的数字字符串。我想将其转换为2223。这是:没有信息 之后的。假设“”之后只有两位小数。

我做了:

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

有更优雅的解决方案吗?也许使用其他功能? - 我不喜欢用明确的数字 -

10 个答案:

答案 0 :(得分:170)

实际上你可以使用带有一个参数的Remove重载:

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

但是,如果您试图避免硬编码长度,可以使用:

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

答案 1 :(得分:15)

也许这就是:

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

答案 2 :(得分:6)

这将返回一个字符串,不包括逗号后的所有内容

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)

这使用当前文化解析double(在美国,我们使用.表示小数点)。但是,这再次假设您的输入字符串可以被解析。

答案 3 :(得分:4)

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

如果您的初始值是字符串中的小数,则需要转换

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

在这个例子中,我选择了Invariant culture,但你可以使用你想要的那个。

我更喜欢使用格式化功能,因为您永远不知道小数是否可能包含2或3个前导数字。

修改:您还可以使用Truncate删除所有,或。

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

答案 4 :(得分:1)

您可以使用TrimEnd。它也很有效,看起来很干净。

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

答案 5 :(得分:1)

使用:

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. 我可以用Substring链接它。   Example: f1.Substring(directorypathLength).SubstringFromEnd(1)
  2. 速度

答案 6 :(得分:1)

您可以使用LastIndexOf和Substring组合来获取sting中逗号最后一个索引左侧的所有字符。

string var = var.Substring(0,var.LastIndexOf(&#39;,&#39;));

答案 7 :(得分:0)

尝试以下方法。它对我有用:

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

答案 8 :(得分:0)

从 C# 8.0 开始,就可以使用 range operator 来做到这一点。

string textValue = "2223,00";
textValue = textValue[0..^3];
Console.WriteLine(textValue);

这将输出字符串 2223

0 表示它应该从字符串中的第零个位置开始

.. 表示它应该取两边操作数之间的范围

^ 表示它应该采用相对于序列末尾的操作数

3 表示它应该从字符串中的第三个位置结束

答案 9 :(得分:-2)

使用lastIndexOf。像:

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