ZetCode

C# 分割字符串

最后修改于 2025 年 4 月 20 日

本教程探讨如何在 C# 中使用 String.Split 和 Regex.Split 方法分割字符串,并提供各种场景的实际示例。

字符串分割概述

String.Split 方法基于指定的分隔符(例如字符或字符串)将字符串分割成子字符串数组。对于更复杂的模式,Regex.Split 使用正则表达式来定义分割标准。

Split(Char[], Int32, StringSplitOptions)
Split(Char, Int32, StringSplitOptions)
Split(String[], Int32, StringSplitOptions)
Split(String[], StringSplitOptions)
Split(String, Int32, StringSplitOptions)
Split(Char[], StringSplitOptions)
Split(Char[], Int32)
Split(Char, StringSplitOptions)
Split(String, StringSplitOptions)
Split(Char[])

String.Split 提供了十个重载来处理不同的分隔符类型、计数和选项,例如删除空条目。

Split(String, String, RegexOptions, TimeSpan)
Split(String, String, RegexOptions)
Split(String, Int32, Int32)
Split(String, Int32)
Split(String)
Split(String, String)

Regex.Split 提供了七个重载,可以基于正则表达式模式进行分割,并提供大小写敏感和超时选项。

按单个字符分割字符串

此示例演示了 String.Split 的基本用法,即使用空格分隔符将句子分割成单词。

Program.cs
string text = "There is an old hawk in the sky";
string[] words = text.Split(' ');

Array.ForEach(words, Console.WriteLine);

该程序通过空格字符将句子分割成单词,从而创建一个子字符串数组。Array.ForEach 方法在新行上打印每个单词。

这种简单的方法非常适合解析具有一致分隔符的文本,例如句子中以空格分隔的单词。输出单独列出每个单词,演示了分割操作。

$ dotnet run
There
is
an
old
hawk
in
the
sky

省略空条目

此示例使用 StringSplitOptions.RemoveEmptyEntries 在分割具有多个空格的字符串时排除空子字符串。

Program.cs
string text = "There  is an old  hawk in the sky";
string[] words = text.Split(' ', StringSplitOptions.RemoveEmptyEntries);

Array.ForEach(words, Console.WriteLine);

文本包含多个连续空格,这可能会在结果数组中产生空条目。通过使用 StringSplitOptions.RemoveEmptyEntries,该程序确保仅包含非空子字符串。

此技术对于清理具有不一致间距的文本数据(例如用户输入或日志文件)非常有用。输出仅显示实际单词,省略了空条目。

$ dotnet run
There
is
an
old
hawk
in
the
sky

按多个字符分割

此示例使用多个分隔符字符分割字符串,展示了 String.Split 处理各种分隔符的能力。

Program.cs
string text = "falcon;eagle,forest,sky;cloud,water,rock;wind";
string[] words = text.Split([',', ';']);

Array.ForEach(words, Console.WriteLine);

该程序分割包含由逗号和分号分隔的单词的字符串。Split 方法接受一个字符数组作为分隔符,并在遇到任一字符时分割字符串。

此方法对于解析具有多个分隔符的数据(例如具有混合分隔符的 CSV 文件)非常有用。输出列出每个单词,展示了成功地按两个分隔符进行分割。

$ dotnet run
falcon
eagle
forest
sky
cloud
water
rock
wind

限制子字符串的数量

此示例使用重载方法中的 count 参数来限制 String.Split 生成的子字符串的数量。

Program.cs
string text = "falcon,eagle,forest,sky,cloud,water,rock,wind";
string[] words = text.Split(',', 4);

Array.ForEach(words, Console.WriteLine);

该程序将逗号分隔的字符串分割成最多四个子字符串。Split 方法在达到指定的计数后停止分割,并将剩余文本保留为单个子字符串。

此技术对于从结构化数据中提取固定数量的字段(例如 CSV 行的前几列)非常有用。输出显示前三个单词作为单独的子字符串,其余的合并到第四个子字符串中。

$ dotnet run
falcon
eagle
forest
sky,cloud,water,rock,wind

按字符串分隔符分割

此示例使用 String.Split 基于字符串分隔符(而不是单个字符)分割字符串。

Program.cs
string text = "hawkxxowlxxvulturexxeagle";
string[] birds = text.Split("xx");

Array.ForEach(birds, Console.WriteLine);

该程序使用 "xx" 作为分隔符分割字符串,从而生成一个鸟类名称数组。接受字符串分隔符的 Split 重载启用了此功能。

此方法非常适合解析具有多字符分隔符的文本,例如日志条目或自定义格式的数据。输出列出每个鸟类名称,确认成功分割。

$ dotnet run
hawk
owl
vulture
eagle

使用 Regex.Split 分割

此示例使用 Regex.Split 基于正则表达式模式分割字符串,从而处理复杂的分隔符场景。

Program.cs
using System.Text.RegularExpressions;

string text = "There are\t\t many clouds   in the \n sky.";
Regex rx = new Regex(@"\s+", RegexOptions.Compiled);
string[] data = rx.Split(text);

Array.ForEach(data, Console.WriteLine);

该程序使用正则表达式 (\s+) 分割包含制表符、多个空格和换行符的字符串,该表达式匹配一个或多个空格字符。RegexOptions.Compiled 标志提高了重复使用的性能。

Regex.Split 对于处理不规则分隔符(例如文本文件中变化的空格)非常强大。输出列出非空子字符串,显示了通过模式进行的有效分割。有关更多详细信息,请参阅 C# 正则表达式教程

$ dotnet run
There
are
many
clouds
in
the
sky.

连接分割的字符串

此示例演示了 String.Join,它通过使用指定的分隔符连接字符串数组来补充分割操作。

Program.cs
List<string> words = ["falcon", "wood", "sky", "water"];
string text = string.Join(",", words);

Console.WriteLine(text);

该程序使用逗号作为分隔符将单词列表连接成单个字符串。String.Join 是 String.Split 的逆运算,将元素组合成统一的字符串。

此方法对于格式化数据(例如创建 CSV 字符串或显示列表)非常有用。输出显示由逗号连接的单词,说明了分割过程的逆过程。

$ dotnet run
falcon,wood,sky,water

来源

如何在 C# 中使用 String.Split 分隔字符串

在本文中,我们探讨了在 C# 中使用 String.Split 和 Regex.Split 分割字符串的方法。

作者

我叫 Jan Bodnar,是一位热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已经撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程