c#的string.split方法核心作用是将字符串按指定分隔符拆分为字符串数组。1. 处理多个分隔符时,可通过传入char[]或string[]数组实现,如split(new char[] { ',', ';', ' ' })可同时按逗号、分号和空格分割;2. 处理空字符串时,使用stringsplitoptions.removeemptyentries可自动移除结果中的空项,避免额外过滤;3. 使用stringsplitoptions.trimentries可在分割时自动去除每项前后空白,简化数据清理;4. 与regex.split相比,string.split适用于固定分隔符的简单场景,性能更高,而regex.split支持复杂模式匹配,如按正则表达式分割,但性能开销更大;5. 性能方面,split会创建新字符串数组并分配内存,频繁或大规模使用时应注意内存开销,避免在循环中重复调用,优先使用字符分隔符以提升效率,且在非必要时可省略removeemptyentries以减少判断开销。总之,string.split是文本处理的基础工具,合理使用选项和分隔符类型可兼顾性能与代码简洁性。
C#的
String.Split
String.Split
当我们谈论分割,最直观的可能就是用一个字符来分,比如逗号或空格。
string data = "Apple,Banana,Orange"; string[] fruits = data.Split(','); // 默认行为,得到 ["Apple", "Banana", "Orange"] Console.WriteLine(string.Join(";", fruits)); // 输出 Apple;Banana;Orange
但生活中的数据往往没那么规整,有时候分隔符会是字符串,比如XML或JSON片段中的特定标签,或者更复杂一点,数据里可能出现连续的分隔符,导致产生空字符串。
string messyData = "Name::John;;Age::30;;;City::New York"; // 尝试用多个字符分隔符 char[] delimiters = new char[] { ':', ';' }; string[] parts = messyData.Split(delimiters); // 此时会得到 ["Name", "", "John", "", "", "Age", "", "30", "", "", "", "City", "", "New York"] // 注意到了吗?中间有很多空字符串,因为连续的分隔符被视为多次分割。 // 这时候,StringSplitOptions.RemoveEmptyEntries 就显得非常重要了 string[] cleanParts = messyData.Split(delimiters, StringSplitOptions.RemoveEmptyEntries); // cleanParts 现在是 ["Name", "John", "Age", "30", "City", "New York"] Console.WriteLine(string.Join("|", cleanParts)); // 输出 Name|John|Age|30|City|New York
我个人觉得,
StringSplitOptions.RemoveEmptyEntries
Split
Where(s => !string.IsNullOrEmpty(s))
你也可以用一个字符串数组作为分隔符,这在处理特定模式的文本时非常有用:
string complexSentence = "Hello, world! How are you doing? I'm fine."; string[] stringDelimiters = new string[] { ", ", "! ", "? " }; // 注意这里的分隔符是包含空格的字符串 string[] phrases = complexSentence.Split(stringDelimiters, StringSplitOptions.RemoveEmptyEntries); Console.WriteLine(string.Join(" - ", phrases)); // 输出 Hello - world - How are you doing - I'm fine.
这里需要注意的是,当使用字符串数组作为分隔符时,
StringSplitOptions.RemoveEmptyEntries
处理多个分隔符通常通过提供一个
char[]
string[]
Split
string text = "item1, item2;item3 item4"; char[] separators = new char[] { ',', ';', ' ' }; string[] items = text.Split(separators); // 结果会是 ["item1", "", "item2", "item3", "item4"] -- 仍然有空字符串
这里的问题在于,
item1, item2
StringSplitOptions
StringSplitOptions.RemoveEmptyEntries
string text = "item1, item2;item3 item4"; char[] separators = new char[] { ',', ';', ' ' }; string[] itemsClean = text.Split(separators, StringSplitOptions.RemoveEmptyEntries); // itemsClean 现在是 ["item1", "item2", "item3", "item4"] Console.WriteLine(string.Join(" | ", itemsClean)); // 输出 item1 | item2 | item3 | item4
另外一个不那么常用的选项是
StringSplitOptions.TrimEntries
Trim()
string messyInput = " apple , banana , orange "; string[] trimmedFruits = messyInput.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); // trimmedFruits 现在是 ["apple", "banana", "orange"] Console.WriteLine(string.Join("-", trimmedFruits)); // 输出 apple-banana-orange
我发现,当数据源本身就可能带有不必要的空格时,
TrimEntries
String.Split
Regex.Split
String.Split
Regex.Split
String.Split
然而,当分割逻辑变得复杂,需要基于某种模式而非固定字符时,
Regex.Split
Regex.Split(text, @"\s+")
String.Split
char[]
String.Split
Regex.Split
String.Split
举个例子,如果我想按一个或多个非字母数字字符来分割:
string complexText = "Alpha123_Beta456-Gamma789"; // 使用String.Split会很麻烦,需要列举所有可能的非字母数字字符 // char[] separators = new char[] { '_', '-', '!', '@', '#' /* ... */ }; // string[] parts = complexText.Split(separators, StringSplitOptions.RemoveEmptyEntries); // 使用Regex.Split则非常简洁 string[] regexParts = System.Text.RegularExpressions.Regex.Split(complexText, @"[^a-zA-Z0-9]+", System.Text.RegularExpressions.RegexOptions.RemoveEmptyEntries); // regexParts 现在是 ["Alpha123", "Beta456", "Gamma789"] Console.WriteLine(string.Join(" | ", regexParts)); // 输出 Alpha123 | Beta456 | Gamma789
从性能角度看,正则表达式的初始化和匹配过程都有开销,尤其是当模式复杂或者字符串非常大时。所以,我的经验是,如果
String.Split
Regex.Split
String.Split
字符串分配:
String.Split
string[]
String.IndexOf
String.Substring
ReadOnlySpan<char>
分隔符类型:
char
char[]
string[]
string[]
StringSplitOptions.RemoveEmptyEntries
Split
避免在循环中重复调用: 这是一个通用的性能建议,但对于
String.Split
Split
总的来说,对于大多数日常编程任务,
String.Split
以上就是C#的String.Split方法如何分割字符串?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号