信息
您所需的主题如下所示。但此主题未包含在此库中。

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

2013/12/13

返回的字符串数组包含此字符串中的子字符串(由指定字符串数组的元素分隔)。参数指定是否返回空数组元素。

Namespace:  System
程序集:  mscorlib(位于 mscorlib.dll 中)

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 或不包含任何字符,则采用空白字符作为分隔符。有关由 Split 方法解释为空白字符的字符列表,请参见 String.Split(Char[]) 方法"备注"部分中的表。(请注意,此列表与由 Trim() 方法识别的空白字符的列表稍有不同。)但是,如果调用中的 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

比较详细信息

Split(String[], StringSplitOptions) 方法提取此字符串中的子字符串,这些子字符串由 separator 参数中的一个或多个字符串分隔,然后该方法将这些子字符串作为数组的元素返回。

Split 方法使用区分大小写的序号排序规则执行比较,从而查找分隔符。有关字、字符串和序号排序的更多信息,请参见 System.Globalization.CompareOptions 枚举。

Split(String[], StringSplitOptions) 方法忽略 separator 的任何值为 null 或空字符串 ("") 的元素。

为了在 separator 中的字符串具有公共字符的情况下避免出现不明确的结果,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 方法调用中使用相同的字符集拆分字符串,请考虑创建一个数组并在每个方法调用中都引用该数组。这可以极大地减少每个方法调用的额外系统开销。

下面的示例演示通过调用字符串的 String.Split(String[], StringSplitOptions) 方法(其 options 参数等于 StringSplitOptions.NoneStringSplitOptions.RemoveEmptyEntries)所返回的数组中的差异。


using System;

class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      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.
      outputBlock.Text += String.Format("Splitting the string:\n   \"{0}\".", source) + "\n";
      outputBlock.Text += "\n";
      outputBlock.Text += String.Format("Using the delimiter string:\n   \"{0}\"",
                        stringSeparators[0]) + "\n";
      outputBlock.Text += "\n";

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

      // Split delimited by another string and return all non-empty elements.
      result = source.Split(stringSeparators,
                            StringSplitOptions.RemoveEmptyEntries);
      outputBlock.Text += String.Format("Result including non-empty elements ({0} elements):",
                        result.Length) + "\n";
      outputBlock.Text += "   ";
      foreach (string s in result)
      {
         outputBlock.Text += String.Format("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s);
      }
      outputBlock.Text += "\n";
   }
}
// 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'


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

显示: