如何使用 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 編製索引到屬性減 1 傳 Array.Length 回的值:

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);
}

另請參閱