簡體   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