我正在将一个c ++类移植到C#,我遇到了困难。
我想找到一个等价的SpanIncluding。
这是我的cpp代码:
while (Notes.Mid(j,1).SpanIncluding("0123456789").IsEmpty()!=NULL){}
任何人都可以帮助我吗?
答案 0 :(得分:2)
我相信SpanIncluding
从字符串的开头开始匹配,在找到第一个不匹配的字符时停止。
因此,一般情况下的一个表述是:
string match = new string(someString.ToCharArray().
TakeWhile(c => "0123456789".Contains(c)).ToArray());
(或使用正则表达式的等效词)。
但是,在问题中给出的示例中,只有一个字符,所以整个事情可能归结为测试此字符是>= '0'
还是<= '9'
:
while(char.IsDigit(Notes[j])) { ... };
答案 1 :(得分:1)
我找到了SpanIncluding的MSDN页面,它似乎是一个非常具体的功能。我无法真正理解它试图解决的问题,因为它有一些奇怪的警告。
LINQ将是实现它的一种方式:
string text = "2334562";
IEnumerable<char> spannedChars = text.TakeWhile(c => "1234567890".Contains(c));
如果我正确理解MSDN页面,这是{3}选项的更直接端口,因为结果集应该在它击中不在生成字符串中的字符时停止。