C# 中字符串分割最常用、最直接的方式就是 String.Split 方法。它能把一个字符串按指定的分隔符(字符或字符串)切分成多个子串,返回 string[] 数组。用法简单,但细节不少,掌握关键点才能避免踩坑。
基础用法:按单个字符分割
最常见的是用一个字符作为分隔符,比如逗号、空格、制表符等:
string text = "apple,banana,orange";
string[] fruits = text.Split(',');结果是
{"apple", "banana", "orange"}。注意:Split 默认会保留空项(比如 "a,,b".Split(',') → {"a", "", "b"}),如果想跳过空字符串,得加参数:
text.Split(',', StringSplitOptions.RemoveEmptyEntries) —— 忽略空项
text.Split(',', StringSplitOptions.None) —— 默认行为,保留空项(可省略)
进阶用法:按多个字符或字符串分割
支持传入字符数组(多个分隔符)或字符串数组(支持多字符分隔符):
按多种单字符分割:"a,b;c:d".Split(',', ';', ':') → {"a", "b", "c", "d"}
按字符串分割(需传 string[]):"one||two||three".Split(new string[] { "||" }, StringSplitOptions.None)
⚠️ 注意:用字符串分割时,第二个参数必须是
StringSplitOptions枚举值,不能省略;而用字符分割时可以省略。
常见陷阱与注意事项
几个容易出错的地方要特别留意:
空字符串调用 Split 会返回包含一个空字符串的数组:"".Split(',') → {""},不是 null 或空数组
分隔符连续出现时,是否产生空项取决于 StringSplitOptions 设置
区分大小写:Split 本身不处理大小写,如需忽略大小写分割,得先用 ToLower()或正则替代 性能考虑:对超长字符串频繁分割,可考虑用
Span<char>.Split</char>(.NET Core 2.1+)提升效率
替代方案:什么时候不该用 Split?
Split 适合规则分隔场景,但遇到复杂需求建议换方式:
需要按固定长度切分 → 用Substring或
Span.Chunk分隔逻辑含条件(如“逗号但不在引号内”)→ 用正则表达式
Regex.Split只取前 N 段或后几段 → 可结合
Take/
Skip或手动遍历,避免全量分割浪费内存
基本上就这些。Split 看似简单,但参数组合和边界情况理清楚,写出来的代码才健壮可靠。
