咨询.NET中string.Split方法相邻分隔符返回空数组元素的原因
.NET 中
string.Split 方法拆分输出差异说明 参考的官方拆分规则
分隔符参数对应的每一个元素,都会作为独立的分隔字符参与匹配。如果两个分隔符位置相邻,或是分隔符出现在待拆分字符串的开头、结尾位置,那么返回的字符串数组中对应的元素将包含空字符串(Empty)。
两组测试代码的实际运行结果
第一组测试代码
string str = "Hello.. How.. are.. you?"; string[] words = str.Split(new char[] { '.' }); foreach (string s in words) { MessageBox.Show(s); }
拆分得到的数组元素依次为:Hello、""、How、""、are、""、you?
第二组测试代码
string str = "Hello. How. are. you?"; string[] words = str.Split(new char[] { '.' }); foreach (string s in words) { MessageBox.Show(s); }
拆分得到的数组元素依次为:Hello、 How、 are、 you?
差异背后的运行逻辑
两组代码调用的是同一版string.Split重载方法,拆分规则完全一致,不存在隐藏的逻辑分支,输出差异完全来自待拆分字符串本身的结构区别:
- 第一组字符串中存在3处连续相邻的
.分隔符:按照规则,每个独立的.都是独立的拆分节点,两个相邻节点之间如果没有任何字符,就会生成空字符串元素。连续两个.的结构在字符串中一共出现3次,因此最终拆分数组里会对应出现3个空字符串元素。 - 第二组字符串中的
.分隔符都是独立分散的,不存在两个.相邻的情况:每个.拆分节点之间的区间都包含有效字符(单词+前置空格),拆分时会完整保留区间内的所有内容,不会触发空字符串的生成条件,因此最终数组中没有空元素,每个拆分段都保留了原本字符串里的前置空格。
补充说明:本次调用的Split方法仅将.作为拆分依据,空格不属于拆分参数范畴,会作为待拆分内容的一部分被完整保留,不会被单独过滤或拆分。
内容的提问来源于stack exchange,提问作者user2111639
相关产品推荐
相关产品推荐

