本文章是由機器翻譯。 將指標移到文章內的文字上方即可查看原文。 其他資訊。
譯文
原文
資訊
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

String.Split 方法 (String[], StringSplitOptions)

傳回字串陣列,這個陣列包含這個字串中,由指定的字串陣列之元素所分隔的子字串。 參數指定是否傳回空白的陣列元素。

命名空間:  System
組件:  mscorlib (在 mscorlib.dll 中)

[ComVisibleAttribute(false)]
public string[] Split(
	string[] separator,
	StringSplitOptions options
)

參數

separator
類型:System.String[]
單一字元字串陣列 (可分隔這個執行個體中的子字串)、不包含分隔符號的空陣列或 null
options
類型:System.StringSplitOptions
RemoveEmptyEntries 表示要省略傳回陣列中的空陣列元素,否則 None 表示要包含傳回陣列中的空陣列元素。

傳回值

類型:System.String[]
陣列,其元素包含了這個字串中由 separator 內的一個或多個字串所分隔的子字串。 如需詳細資訊,請參閱<備註>一節。

例外狀況條件
ArgumentException

options 不是其中一個 StringSplitOptions 值。

傳回值詳細資料

分隔符號字串不會加入傳回的陣列元素中。

如果此執行個體在 separator 中不包含任何字串,則傳回的陣列會由包含此執行個體的單一元素所組成。 如果 separator 參數為 null 或不包含任何字元,則會假設使用空白字元當做分隔符號。 空白字元由 Unicode 標準定義,如果被傳遞至 Char.IsWhiteSpace 方法,會傳回 true 但是,如果在這個方法多載呼叫中的 separator 參數是 null,編譯器多載解析會失敗。 若要明確識別被呼叫的方法,您的程式碼必須表示 null 的型別。 下列範例示範幾種明確識別此多載的方式。


string phrase = "The quick  brown fox";
string[] words;

words = phrase.Split(default(string[]), StringSplitOptions.RemoveEmptyEntries);

words = phrase.Split((string[]) null, StringSplitOptions.RemoveEmptyEntries);

words = phrase.Split(null as string[], StringSplitOptions.RemoveEmptyEntries);


如果 options 參數為 RemoveEmptyEntries,而且這個執行個體的長度為零,則會傳回空白陣列。

separator 的每個項目會定義包含一個或多個字元的個別分隔符號。 如果 options 參數為 None,且兩個分隔符號為相鄰,或是在此執行個體的開頭或結尾找到一個分隔符號,則對應的陣列元素會包含 Empty

分隔符號陣列

如果任何一個 separator 中的項目比單一字元包含更多,只有該項目的第一個字元會考慮符號且所有後續的字元會被忽略。 例如,如果在 separator 中的其中一個項目為「10 」,會嘗試將字串「This10is10a10string」傳回下列四個元素陣列:「this」, 「0is」, 「0a」, 「0string」。}.

比較作業詳細資料

Split 方法會在這個字串中取出由 separator 參數內一個或多個字串所分隔的子字串,然後將這些子字串當做陣列元素傳回。

Split 方法使用區分大小寫的序數排序規則來執行比較,以尋找分隔符號。 如需文字、字串和序數排序的詳細資訊,請參閱 System.Globalization.CompareOptions 列舉型別。

Split 方法呼略其值為 null 或空字串 ("") 的 separator 的任何項目。

為了避免當 separator 中的字串有共同字元時產生的模稜兩可 (Ambiguity) 情形,Split 作業會從此執行個體值的開頭處理到結尾,並符合在 separator 中等於此執行個體內分隔符號的第一個元素。 執行個體中遇到子字串的順序優先於 separator 中的項目順序。

例如,假設執行個體的值為 "abcdef"。 但是,如果 separator 的第一個項目為 "ef",而第二個項目為 "bcde",則分割作業的結果會是 "a" 和 "f"。 這是因為遇到了執行個體中的子字串 "bcde",並符合 separator 中的元素之後,才會遇到子字串 "f"。

但是,如果 separator 的第一個項目為 "bcd",而第二個項目為 "bc",則分割作業的結果會是 "a" 和 "ef"。 這是因為 "bcd" 是 separator 中第一個與執行個體中分隔符號相符的分隔符號。 如果分隔符號的順序相反,使得第一個項目為 "bc" 且第二個項目為 "bcd",則結果會是 "a" 和 "def"。

效能考量

Split 方法會針對每一個陣列元素的傳回陣列物件和 String 物件配置記憶體。 如果您的應用程式需要最佳效能,或是管理記憶體配置對於應用程式非常重要,請考慮使用 IndexOfIndexOfAny 方法,並選擇性地使用 Compare 方法,在字串內找出子字串。

如果您在分隔字元上分隔字串,請使用 IndexOfIndexOfAny 方法,在字串內找出分隔字元。 如果您在分隔字串上分隔字串,請使用 IndexOfIndexOfAny 方法,找出分隔字串的第一個字元。 然後使用 Compare 方法,判斷在第一個字元之後的字元是否與分隔字串的剩餘字元相等。

此外,如果在多次呼叫 Split 方法時使用同一組字元分割字串,請考慮建立單一陣列,並在每次呼叫方法時參考該陣列。 這會大幅減少每一個方法呼叫的額外負荷。

呼叫者注意事項

在 .NET Framework 3.5 和舊版中,如果將 null 或不包含任何字元的 separator 傳遞至 Split 方法,則方法會使用一組字元來分割字串,這組字元與 Trim 方法用於修剪字串的字元稍有不同。 在 .NET Framework 4 中,兩種方法會使用一組完全相同的 Unicode 空白字元。

下列範例說明使用等於 StringSplitOptions.NoneStringSplitOptions.RemoveEmptyEntriesoptions 參數來呼叫字串的 String.Split(String[], StringSplitOptions) 方法,所傳回陣列的差異。


using System;

class Example 
{
   public static void Main() 
   {
      string source = "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]";
      string[] stringSeparators = new string[] {"[stop]"};
      string[] result;

      // Display the original string and delimiter string.
      Console.WriteLine("Splitting the string:\n   \"{0}\".", source);
      Console.WriteLine();
      Console.WriteLine("Using the delimiter string:\n   \"{0}\"", 
                        stringSeparators[0]);
      Console.WriteLine();                           

      // Split a string delimited by another string and return all elements.
      result = source.Split(stringSeparators, StringSplitOptions.None);
      Console.WriteLine("Result including all elements ({0} elements):", 
                        result.Length);
      Console.Write("   ");
      foreach (string s in result)
      {
         Console.Write("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s);                   
      }
      Console.WriteLine();
      Console.WriteLine();

      // Split delimited by another string and return all non-empty elements.
      result = source.Split(stringSeparators, 
                            StringSplitOptions.RemoveEmptyEntries);
      Console.WriteLine("Result including non-empty elements ({0} elements):", 
                        result.Length);
      Console.Write("   ");
      foreach (string s in result)
      {
         Console.Write("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s);                   
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    Splitting the string:
//       "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
//    
//    Using the delimiter string:
//       "[stop]"
//    
//    Result including all elements (9 elements):
//       '<>' 'ONE' '<>' 'TWO' '<>' '<>' 'THREE' '<>' '<>'
//    
//    Result including non-empty elements (3 elements):
//       'ONE' 'TWO' 'THREE'


下列範例定義包含標點符號和空白字元的陣列分隔符號。 透過這個陣列包含 StringSplitOptions.RemoveEmptyEntries 中的值設定為 Split(String[], StringSplitOptions) 方法會傳回包含字串中的個別單字的陣列。


using System;

public class Example
{
   public static void Main()
   {
      string[] separators = {",", ".", "!", "?", ";", ":", " "};
      string value = "The handsome, energetic, young dog was playing with his smaller, more lethargic litter mate.";
      string[] words = value.Split(separators, StringSplitOptions.RemoveEmptyEntries);
      foreach (var word in words)
         Console.WriteLine(word);
   }
}
// The example displays the following output:
//       The
//       handsome
//       energetic
//       young
//       dog
//       was
//       playing
//       with
//       his
//       smaller
//       more
//       lethargic
//       litter
//       mate


請注意方法呼叫的 options 引數是設定為 StringSplitOptions.RemoveEmptyEntries 這樣可避免在傳回的陣列中表示標點符號和空白字元之間的空的子字串比對的 String.Empty 值。

.NET Framework

支援版本:4.5.2、4.5.1、4.5、4、3.5、3.0、2.0

.NET Framework Client Profile

支援版本:4、3.5 SP1

可攜式類別庫

支援版本:可攜式類別庫

適用於 Windows 市集應用程式的 .NET

支援版本:Windows 8

適用於 Windows Phone 應用程式的 .NET

支援版本:Windows Phone 8、Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (不支援伺服器核心角色), Windows Server 2008 R2 (SP1 (含) 以後版本支援伺服器核心角色,不支援 Itanium)

.NET Framework 並不支援各種平台的所有版本。如需支援版本的清單,請參閱.NET Framework 系統需求

社群新增項目

顯示:
© 2015 Microsoft