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

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

注意

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

小提示

可以使用 AI 协助,使用 GitHub Copilot 拆分字符串

将字符串拆分为单词

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

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

foreach (var word in words)
{
    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++)
{
    Console.WriteLine($"Index {i}: <{words[i]}>");
}

String.Split 有许多重载。 这些重载自定义拆分字符串的行为:

  • 可以将分隔符指定为 char 值或 string 值。
  • 可以指定一个分隔符或多个分隔符。 如果指定多个分隔符,它们必须全部为同一类型(或 charstring)。
  • 可以指定要返回的最大子字符串数。
  • 可以指定是否忽略重复的分隔符,或在返回值中生成空子字符串。
  • 可以指定是否从返回的子字符串中删除前导空格和尾随空格。

其余的示例使用不同的重载来显示这些行为中的每一个。

指定多个分隔符

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

限制输出大小

以下示例演示如何将输出限制为源字符串中的前四个子字符串。

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

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

删除空子字符串

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

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

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

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

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

剪裁空格

以下示例显示了剪裁条目的效果:

string numerals = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10";
string[] words = numerals.Split(',', StringSplitOptions.TrimEntries);

Console.WriteLine("Trimmed entries:");
foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}
words = numerals.Split(',', StringSplitOptions.None);
Console.WriteLine("Untrimmed entries:");
foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}

未处理条目在数字之前具有额外的空格。

使用 GitHub Copilot 拆分字符串

可以在 IDE 中使用 GitHub Copilot 生成代码,以使用 String.Split C# 拆分字符串。 可以根据要求自定义提示以使用字符串和分隔符。

以下文本显示了 Copilot 聊天的示例提示:

Generate C# code to use Split.String to split a string into substrings.
Input string is "You win some. You lose some." Delimiters are space and period.
Provide example output.

GitHub Copilot 由 AI 提供支持,因此可能会带来意外和错误。 有关详细信息,请参阅 Copilot 常见问题解答

了解更多关于 Visual Studio 中的 GitHub Copilot 和 VS Code 中的 GitHub Copilot

另请参阅