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

我有一个这样的数字string2223,00 。 我想把它2223 。 这是:没有“ 后面的信息。 假设“ ”后面只有两位小数。

我做了:

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

有没有更优雅的解决scheme? 也许使用另一个function? – 我不喜欢把明确的数字 –

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

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

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

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

也许这个:

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

这将返回给您一个string,排除逗号后的所有内容

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

当然,这假定你的string实际上有一个逗号和小数。 如果没有,上面的代码将会失败。 你想要做更多的检查:

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

我假设你正在使用一个string开始。 理想的情况下,如果你使用一个数字开头,就像float或者double,你可以把它转换成一个int ,然后执行myInt.ToString()

 myInt = (int)double.Parse(myString) 

这使用当前的文化来分析双精度(这里在美国,我们用小数点)。 但是,这又假设你的inputstring是可以被parsing的。

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

如果你的初始值是一个十进制string,你将需要转换

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

在这个例子中,我select了Invariant文化,但你可以使用你想要的。

我更喜欢使用“格式化”function,因为您将来不会知道小数是否包含2或3的前导数字。

编辑:您也可以使用Truncate删除所有后,或。

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

使用:

 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. 速度。

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

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

尝试以下。 它为我工作:

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

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

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

使用lastIndexOf。 喜欢:

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