Split()传字符数组可同时按多个单字符分隔符分割,需用StringSplitOptions.RemoveEmptyEntries去除空项;传字符串会被当作整体分隔符,多字符分隔须用string[]重载。

直接用 string.Split() 传入字符数组即可,不需要写循环或正则——但默认会保留空项,这点常被忽略。
为什么 Split() 传多个分隔符要写成 char[] 而不是字符串?
因为 string.Split() 重载中,接受多个分隔符的签名是 Split(char[]) 或 Split(string[], StringSplitOptions)。传单个字符串(如 "|,")会被当作一个整体分隔符,不是分别按 | 和 , 切。
常见错误现象:"a|b,c".Split("|,") 结果是 ["a|b,c"](没切开),因为系统在找字面量为 "|," 的子串。
正确做法:
string text = "apple,banana|cherry;date";
string[] parts = text.Split(new char[] { ',', '|', ';' });
怎么去掉结果里的空字符串?
当两个分隔符连着出现(如 "a,,b")、开头结尾有分隔符(如 ",a,b,"),默认 Split() 会生成空字符串元素。不处理的话,后续遍历容易触发 NullReferenceException 或逻辑错判。
使用 StringSplitOptions.RemoveEmptyEntries 参数即可过滤:
string[] parts = text.Split(new char[] { ',', '|', ';' }, StringSplitOptions.RemoveEmptyEntries);
注意:这个参数只对 char[] 和 string[] 重载有效,不能和无参 Split() 混用。
可选行为对比:
-
text.Split('a', 'b')→ 保留所有空项 -
text.Split('a', 'b', StringSplitOptions.RemoveEmptyEntries)→ 去掉空项
用字符串数组当分隔符时要注意什么?
当你需要按多字符分隔符拆分(比如 "[SEP]"、"::"),就得用 string[] 重载,并显式指定比较方式(尤其含 Unicode 或大小写敏感场景):
string[] separators = { "[SEP]", "::" };
string[] parts = text.Split(separators, StringSplitOptions.None); // 默认 Ordinal
如果分隔符含特殊字符(如反斜杠、点号),别误以为要转义——这里就是纯字面匹配,不需要正则语法。
性能提示:相比 char[],string[] 分割稍慢,因为要逐个尝试每个分隔符;日常简单场景差异可忽略,高频或超长文本建议优先用单字符分隔符。
最易被忽略的一点:Split() 返回的是新数组,原字符串不变;但如果你依赖索引位置(比如想同时拿到分割前的起始偏移),它不提供这些信息——这时候得换 Regex.Matches() 或手写解析器。











