剪切一个已知起点的字符串&;结束索引
本文关键字:字符串 amp 索引 结束 起点 一个 | 更新日期: 2023-09-27 18:26:00
当我有一个字符串要从某个索引剪切成一个新字符串到某个索引时,我应该使用哪个函数?
如果字符串是:
ABCDEFG
这意味着当指定的两个索引为1和3时,检索BCD。
如果endIndex
指向要包含在提取的子字符串中的最后一个字符:
int length = endIndex - startIndex + 1;
string extracted = s.Substring(startIndex, length);
如果endIndex
指向所需子字符串后面的第一个字符(即剩余文本的开头):
int length = endIndex - startIndex;
string extracted = s.Substring(startIndex, length);
参见String.Substring方法(Int32,Int32)以获取有关Microsoft文档的官方描述。
由于C#8.0,仅在.NET Core和.NET 5+中,您可以使用索引和范围
string extracted = s[startIndex..endIndex];
其中排除了endIndex处的位置。这对应于我的第二个Substring
示例,其中endIndex
指向所需子字符串后面的第一个字符(即剩余文本的开头)。
如果endIndex
要指向要包含的最后一个字符,只需在endIndex
:中添加一个即可
string extracted = s[startIndex..(endIndex + 1)];
这在C#8.0的新Range功能中成为可能。
在string
上使用Range
来实现这一点的一种扩展方法是:
public static class StringExtensions
{
public static string SubstringByIndexes(this string value, int startIndex, int endIndex)
{
var r = Range.Create(startIndex, endIndex + 1);
return value[r];
/*
// The content of this method can be simplified down to:
return value[startIndex..endIndex + 1];
// by using a 'Range Expression' instead of constructing the Range 'long hand'
*/
}
}
注意:在构造用作范围末尾的范围时,endIndex
中会添加1。该范围是独占的,而不是包含的
可以这样称呼:
var someText = "ABCDEFG";
var substring = someText.SubstringByIndexes(1, 3);
在substring
中给出BCD的值。
不幸的是,C#本身并没有您需要的东西。C#提供了子字符串(int startIndex,int length)。要实现Substring(int startIndex,int endIndex),需要自定义实现。以下扩展方法可以使可重用性更容易/更干净:
public static class Extensions
{
public static string Substring2(this string value, int startIndex, int endIndex)
{
return value.Substring(startIndex, (endIndex - startIndex + 1));
}
}
有两种方法可以对字符串进行子字符串处理。。
1)
public string Substring(
int startIndex
)
从该实例检索子字符串。子字符串从指定的字符位置开始。
2)
public string Substring(
int startIndex,
int length
)
从该实例检索子字符串。子字符串从指定的字符位置开始,并具有指定的长度。