【问题标题】:c# Leave last 3 letters in a string [duplicate]c#在字符串中保留最后3个字母[重复]
【发布时间】:2020-06-18 02:22:12
【问题描述】:

如何从字符串中删除字母并仅保留最后 3 个字符

输入:

foobar

输出:

bar

我试过了:

string.Concat("foobar".Reverse().Skip(3).Reverse());

但删除最后 3 行并不能保留它们

【问题讨论】:

  • string.Concat("hello".Reverse().Take(3).Reverse());
  • 这是以下内容的副本:stackoverflow.com/questions/35691375/…
  • @stickybit 我认为是的,这个问题应该被标记为重复
  • 哦,天哪,请不要通过使用 Linq 的 Reverse() 两次创建至少 3 个字符串副本来获取字符串的最后 N 个字符...那就是string.Substring() 提供更好的服务并不是一个好方法。
  • @stickybit 该问题已关闭,对低代表用户不可见

标签: c# string substring


【解决方案1】:

好吧,你可以试试Substring:如果source 足够长我们得到Substring,否则保持source不变:

 string source = ...

 string result = source.Length > 3 
   ? source.Substring(source.Length - 3) 
   : source;

甚至

 string result = source.Substring(Math.Max(0, source.Length - 3));

【讨论】:

  • 也可以,谢谢!
【解决方案2】:

从 C# 8 开始,也可以使用range syntax:

string result = source.Length > 3 ? source[^3..] : source;

或:

string result = source[^Math.Min(3, source.Length)..];

[^3..] 是一个范围,意思是“从末尾开始 3 个元素,并一直持续到末尾”。

【讨论】:

  • 我喜欢这种最先进的代码(范围);)
  • 出于兴趣,我查看了为此生成的 IL,它确实将其转换为对 string.Substring() 的调用,因此这是非常理想的。
  • 是的,它对数组和字符串有特殊的支持,如果类型有一个合适的Slice 方法和一个Length 或Count 属性,它会伪造索引器。跨度>
【解决方案3】:

还有一个单行解决方案。只需检查源字符串是否有足够的长度来使用 Substring 获取最后 3 个字符或保留字符串原样。 Math.Max 函数将返回正确的索引

var str = "foobar";
var result = str.Substring(Math.Max(0, str.Length - 3));

【讨论】:

    猜你喜欢
    • 2021-06-15
    • 2014-06-04
    • 2012-12-02
    • 2018-03-14
    • 1970-01-01
    • 2015-07-04
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多