据说ReadOnlySpan<char>
非常适合解析,因此我尝试使用它,并且遇到了一个我不知道如何处理的用例。
我有一个命令行string
,其中参数前缀-
和分隔符(空格)被转义了(我知道我可以在这里引用它们,但是为了解决这个问题,让我们假设它不是一个选项):
var str = @"foo -bar \-baz\ qux".AsMemory();
令牌生成器应返回以下令牌:
foo
-命令名称bar
-参数名称-baz qux
-参数值案例
1
和2
很简单,因为在这里我只能使用str.Slice(i, length)
,但是如何创建3rd
案例并仅返回一个ReadOnlySpan<char>
? Slice
方法不允许我指定多个start/length
范围,这对于跳过转义字符\
是必需的。例:
str.Slice((10, 4), (15, 3));
其中
(10,4) = "-bar"
和(15,3) = " qux"
使用
StringBuilder
,您可以仅跳过几个字符,以后再跳过其他字符。 Append
如何获得相同的结果? 最佳答案
Span/ReadOnlySpan
是连续的内存块。它不能包含多个范围。此设计对于性能而言是必需的。 Span/ReadOnlySpan
应该和数组一样快。数组之所以快,是因为它们是连续的内存块,没有进一步的抽象。
我看不到不分配新字符串就可以做到这一点的方法。您可以对所有连续的子字符串使用Span/ReadOnlySpan
,但是您的解析问题似乎不适合使用span存储结果。
关于c# - 使用ReadOnlySpan <char>处理转义序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51346366/