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
相关产品推荐
相关产品推荐

