2021-02-01 22:20:40
C#的String.Split方法通过指定分隔符将字符串拆分为字符串数组,支持多种分隔符类型、空字符串处理选项,并需注意性能优化。 以下是具体说明:
处理多个分隔符
字符数组分隔符:通过char[]指定多个单字符分隔符,例如:string text = "item1, item2;item3 item4";char[] separators = { ',', ';', ' ' };string[] items = text.Split(separators); // 结果包含空字符串 ["item1", "", "item2", "item3", "item4"]
字符串数组分隔符:通过string[]指定多字符分隔符,例如:string complexSentence = "Hello, world! How are you? I'm fine.";string[] stringDelimiters = { ", ", "! ", "? " };string[] phrases = complexSentence.Split(stringDelimiters, StringSplitOptions.RemoveEmptyEntries); // 结果 ["Hello", "world", "How are you", "I'm fine"]
处理空字符串
StringSplitOptions.RemoveEmptyEntries:自动移除结果中的空字符串,例如:string messyData = "Name::John;;Age::30;;;City::New York";char[] delimiters = { ':', ';' };string[] cleanParts = messyData.Split(delimiters, StringSplitOptions.RemoveEmptyEntries); // 结果 ["Name", "John", "Age", "30", "City", "New York"]
StringSplitOptions.TrimEntries(.NET Core 2.0+):自动修剪每个子字符串的前后空白字符,例如:string messyInput = " apple , banana , orange ";string[] trimmedFruits = messyInput.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); // 结果 ["apple", "banana", "orange"]
与正则表达式分割(Regex.Split)的对比
适用场景:
String.Split:适合固定分隔符(如逗号、空格)的简单分割,性能更高。
Regex.Split:支持复杂模式匹配(如按任意空白字符、特定格式日期分割),但性能开销较大。
示例:// 按非字母数字字符分割(Regex.Split更简洁)string complexText = "Alpha123_Beta456-Gamma789";string[] regexParts = Regex.Split(complexText, @"[^a-zA-Z0-9]+"); // 结果 ["Alpha123", "Beta456", "Gamma789"]
性能注意事项
字符串分配:Split会创建新字符串数组,频繁或大规模使用时需注意内存开销,避免在循环中重复调用。
分隔符类型:单字符分隔符(char)性能最优,字符串数组(string[])因需字符串匹配性能稍差。
选项开销:RemoveEmptyEntries会增加额外判断逻辑,非必要时可省略以提升性能。
优化建议:
优先使用字符分隔符。
极端性能敏感场景考虑String.IndexOf+Substring或ReadOnlySpan<char>。
通过性能分析工具确认瓶颈后再优化。
总结:String.Split是文本处理的基础工具,合理选择分隔符类型和选项(如RemoveEmptyEntries、TrimEntries)可兼顾性能与代码简洁性。对于复杂模式分割,再考虑使用Regex.Split。