c# - String.Split 返回奇怪的结果

标签 c# string 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

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/

相关文章:

c++ - 字符串中的所有元素都较低

c - 在C语言中如何将int转换为字符串?

c# - 为什么在 View 中检查 null 时会出现 NullReferenceException

c# - RazorView,对多个模板使用相同的模型对象

c# - 我应该如何将我的商业模式与我的观点联系起来?

java - 在单个空格处拆分字符串

C++ 将 UTF-8 字符串迭代或拆分为符号数组?

c# - 程序集无法在受限制的 AppDomain 中加载

c++ - 我可以检查输入的值是 C++ 中的字符串还是整数吗

java - 在抛出 ArrayIndexOutOfBounds 异常之前检查 String[index] 是否为空