繁体   English   中英

String.Split返回奇怪的结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM