C# 字符串分割方法 C#如何使用Split分割字符串

string.Split()默认按空白字符分割且跳过空项;显式指定分隔符需用char[]或string[]重载,并通过StringSplitOptions控制空项;性能敏感场景推荐Span.Split。

c# 字符串分割方法 c#如何使用split分割字符串

Split 方法的基本用法和默认行为

string.Split() 是 C# 中最常用的字符串分割方法,但它默认按空白字符(空格、制表符、换行等)拆分,且会跳过空项。如果你传入 null 或不传参数,它就走这个逻辑:

string text = "a  b/tc/n";
string[] parts = text.Split(); // 结果是 ["a", "b", "c"],中间所有空白都被合并处理

这容易让人误以为它“按空格切”,其实它识别的是 char.IsWhiteSpace() 范围内的所有字符。如果想严格按空格切,必须显式传入 new char[] { ' ' }

按指定字符或字符串分割,控制空项保留

实际开发中更常见的是按逗号、竖线或固定分隔符切,这时要小心空项处理——比如 "a,,b" 默认会变成 ["a", "b"],丢掉中间的空字符串。

  • StringSplitOptions.None 保留所有结果项(含空字符串)
  • StringSplitOptions.RemoveEmptyEntries(默认)跳过空项
  • 若按字符串分割(如 "||"),必须用 string[].Split(new string[] { "||" }, StringSplitOptions.None),不能直接传 "||"
string data = "apple||banana|||cherry";
string[] result = data.Split(new string[] { "||" }, StringSplitOptions.None);
// result[2] 是空字符串 "",result[3] 是 "cherry"

性能与 Unicode 注意点:避免用 params char[] 重载切长文本

当你写 text.Split('a', 'b', 'c'),编译器调用的是 params char[] 重载,它会把每个字符当作独立分隔符(即“遇到 a 或 b 或 c 就切”)。这在语义上常不是你想要的,而且对大字符串有额外数组分配开销。

68爱写

68爱写

专业高质量AI4.0论文写作平台,免费生成大纲,支持无线改稿

下载

  • 想按多个不同字符切(如空白+标点),用 char.IsSeparator() 或正则更清晰
  • 想按固定字符串切(如 "/r/n"),别错写成 text.Split('/r', '/n')——那会把 "/r/n" 拆成两段,且中间内容错位
  • .NET 6+ 推荐优先用 Split(char, StringSplitOptions)Split(string[], StringSplitOptions) 显式重载,避免隐式转换歧义

替代方案:Span.Split 和 ReadOnlySpan

对性能敏感场景(如高频日志解析),Span 版本可避免堆分配:

ReadOnlySpan span = "a,b,c".AsSpan();
var parts = span.Split(','); // 返回 ReadOnlySpan[],每个元素仍是 Span
// 注意:parts[i].ToString() 才能转成 string,但频繁调用仍可能触发分配

它不支持字符串分隔符,也不接受 StringSplitOptions,空项总是保留。真正零分配需配合上缓存或预分配数组,这点容易被文档忽略。

https://www.php.cn/faq/2011697.html

发表回复

Your email address will not be published. Required fields are marked *