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