[英]String.Split returns weird result
我注意到,如果我通过仅包含空格的空格Split
字符串,则会返回意外的结果。
var spaces = string.Join("",Enumerable.Repeat(" ", 10));
int lenght = spaces.Length; // 10
var result = spaces.Split(' ');
lenght = result.Length; // 11
我不知道为什么result.Length
返回11
空字符串。 而我的输入字符串中有10
空格? 我还尝试了一个字母,例如"a"
,这没有任何区别:
var letters = string.Join("",Enumerable.Repeat("a", 10));
int lenght = letters.Length; // 10
var result = letters.Split('a');
lenght = result.Length; // 11
在文档中说:
如果两个定界符相邻,或者在此实例的开头或结尾找到一个定界符,则对应的数组元素包含Empty。
所以我理解为什么我得到的是空字符串,但我不知道多余的元素是从哪里来的?
文档中有一个示例:
var input = "42..12..19";
var result = input.Split('.');
返回五个结果,其中两个是空字符串。不是三个 。
那么,这是默认的行为吗?
不是错误,完全是预期的行为。
这样看:
1-2-3
在-
上分开。 这导致3个元素:1,2和3。
现在取--3
并再次在破折号上分割。 还有3个元素,其中前2个为空。
分隔符本质上是位于其他两个元素之间的元素。 其间的元素可以为空。 因此,如果您有10个空格并在空格上进行拆分,那么您将始终有11个元素。
您与最后一个例子"42..12..19"
被拆上.
本质上是: 42.EMPTY.12.EMPTY.19
这是5个元素。
它匹配最后一个空格之后的空元素。 在您的最后一个示例中,放置一个.
在字符串的末尾,即使只有5个分隔符,您也会得到6个元素。 实际上,仅查看该示例-有5个元素,但只有4个分隔符。 通常,您将始终拥有比分隔符数量多一个元素,因为在每个分隔符之前将有一个元素,而在最后一个分隔符之后将有一个元素。
考虑一下:
“ 1 2 3 4 5 6 7 8 9 10 11”
上面有10个空格,还有11个数字。 每个空格将前一个数字与下一个数字分开。 如果删除数字,结果数组将具有相同的长度。 这是预期的。
在您的示例中,字符串的开头是一个元素,直到第一个定界符为止。 由于分隔符是第一个字符,因此数组的第一个元素为空。 然后,为每个额外的空间添加一个空数组项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.