我注意到,如果我按空格拆分
一个仅包含空格的字符串,它会返回意外的结果。考虑一下:
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
在documentation它说:
If two delimiters are adjacent, or a delimiter is found at the beginning or end of this instance, the corresponding array element contains 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 个元素。
关于c# - String.Split 返回奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22314815/