You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中已知子串最后索引及长度,如何优雅截取子串?

优化C#字符串子串提取代码

现有字符串abcdefghi,需要提取子串cdef。已知目标子串最后一个字符的索引是5(对应字符f),要包含其前面3个字符,总共4个字符。当前代码可实现功能,但不够简洁,寻求更优实现方式。原代码如下:

string text = "abcdefghi";
int lastIndex = 5;
int numberOfCharsToTake = 4; // 包含lastIndex对应的字符

Console.WriteLine(
    string.Join("",
    text
    .Substring(0, lastIndex + 1)
    .Reverse()
    .Take(numberOfCharsToTake)
    .Reverse()
    )
);

直接利用Substring的重载方法就能大幅简化代码,无需多次反转和拼接操作:

string text = "abcdefghi";
int lastIndex = 5;
int numberOfCharsToTake = 4;

// 计算起始索引:最后一个字符索引减去要取的字符数加1
int startIndex = lastIndex - numberOfCharsToTake + 1;
Console.WriteLine(text.Substring(startIndex, numberOfCharsToTake));

说明

  • Substring(int startIndex, int length) 重载直接从指定起始位置截取指定长度的子串,完全匹配需求
  • 起始索引计算逻辑:lastIndex - numberOfCharsToTake + 1 确保从目标子串的第一个字符开始截取,比如这里5-4+1=2,从索引2(字符c)开始取4个字符,正好得到cdef
  • 相比原代码,避免了两次Reverse()和string.Join()操作,代码更简洁,执行效率也更高

内容的提问来源于stack exchange,提问作者Yossi Sternlicht

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 16:40:56