给定一个
ReadOnlySpan<char>
,我如何确认跨度中给定索引处存在字符串?我需要一个 bool
结果。
我想要一种简单的、最好是一行、零分配的方法。
由于边界检查,必须进行数学计算到跨度末尾的索引偏移量等,我的尝试很快就变得棘手。我的解决方案太冗长了。我想看看你能否彻底解决这个问题。尝试保留 lambda 语法。谢谢。
var span = "FooBarBazBizzBuzz".AsSpan();
Assert.IsTrue(Test(span,9,"Bizz".AsSpan()));
// As you can see, I am trying to use parameters that have no allocation
public bool Test(ReadOnlySpan<char> span, int index, ReadOnlySpan<char> pattern) => //???;
您可以获取从
index
开始的跨度切片,并测试StartsWith
:
bool Test(ReadOnlySpan<char> span, int index, ReadOnlySpan<char> pattern) =>
span[index..].StartsWith(pattern)
这会单独比较
char
值。还有 另一个重载,它采用 StringComparison
作为第二个参数。
如果不想在
index
无效时返回 false,请添加检查:
bool Test(ReadOnlySpan<char> span, int index, ReadOnlySpan<char> pattern) =>
index <= span.Length && index >= 0 &&
span[index..].StartsWith(pattern);