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

String.Split 方法通过基于一个或多个分隔符拆分输入字符串来创建子字符串数组。 此方法通常是分隔字边界上的字符串的最简单方法。 它也用于拆分其他特定字符或字符串上的字符串。

注意

本文中的 C# 示例运行在 Try.NET 内联代码运行程序和演练环境中。 选择“运行”按钮以在交互窗口中运行示例。 执行代码后,可通过再次选择“运行”来修改它并运行已修改的代码。 已修改的代码要么在交互窗口中运行,要么编译失败时,交互窗口将显示所有 C# 编译器错误消息。

下方代码将一个常用短语拆分为一个由每个单词组成的字符串数组。

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');

foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

分隔符的每个实例都会在返回的数组中产生一个值。 由于 C# 中的数组是零索引的,因此数组中的每个字符串将从 0 索引到由 Array.Length 属性返回的值减去 1:

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');

for (int i = 0; i < words.Length; i++)
{
    System.Console.WriteLine($"Index {i}: <{words[i]}>");
}

连续的分隔符将生成空字符串作为返回的数组中的值。 下面的示例介绍如何创建空字符串,该示例使用空格字符作为分隔符。

string phrase = "The quick brown    fox     jumps over the lazy dog.";
string[] words = phrase.Split(' ');

foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

该行为可以更容易地用逗号分隔值 (CSV) 文件之类的格式表示表格数据。 连续的逗号表示空白列。

可传递可选 StringSplitOptions.RemoveEmptyEntries 参数来排除返回数组中的任何空字符串。 要对返回的集合进行更复杂的处理,可使用 LINQ 来处理结果序列。

String.Split 可使用多个分隔符。 下面的示例使用空格、逗号、句点、冒号和制表符作为分隔字符,这些分隔字符在数组中传递到 Split。 代码底部的循环显示返回数组中的每个单词。

char[] delimiterChars = { ' ', ',', '.', ':', '\t' };

string text = "one\ttwo three:four,five six seven";
System.Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiterChars);
System.Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

任何分隔符的连续实例都会在输出数组中生成空字符串:

char[] delimiterChars = { ' ', ',', '.', ':', '\t' };

string text = "one\ttwo :,five six seven";
System.Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiterChars);
System.Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

String.Split 可采用字符串数组(充当用于分析目标字符串的分隔符的字符序列,而非单个字符)。

string[] separatingStrings = { "<<", "..." };

string text = "one<<two......three<four";
System.Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(separatingStrings, System.StringSplitOptions.RemoveEmptyEntries);
System.Console.WriteLine($"{words.Length} substrings in text:");

foreach (var word in words)
{
    System.Console.WriteLine(word);
}

请参阅