在C#中将一个字符串拆分为另一个字符串

我一直在使用Split()方法拆分字符串,但这只在您按字符拆分字符串时才起作用。有没有办法拆分string,另一个字符串按参数拆分?

我尝试将拆分器转换为字符数组,但没有运气。

换句话说,我想拆分string

XX快速xx棕色xx狐狸

xx,并返回一个包含值的数组:

快,棕色,狐狸

613160 次浏览

为了拆分一个字符串,你必须使用字符串数组重载

string data = "THExxQUICKxxBROWNxxFOX";
return data.Split(new string[] { "xx" }, StringSplitOptions.None);
Regex.Split(string, "xx")

这是我通常做的方式。


当然你需要:

using System.Text.RegularExpressions;

或:

System.Text.RegularExpressions.Regex.Split(string, "xx")

但话说回来,我一直都需要那个图书馆。

编辑:请参阅@Danation对更新/更少的versbose重载的回答


有一个拆分过载需要字符串。

"THExxQUICKxxBROWNxxFOX".Split(new [] { "xx" }, StringSplitOptions.None);

您可以使用这些StringSplitOptions中的任何一个

  • -返回值包括数组包含空字符串
  • 的元素
  • 删除空条目参数名-返回值不包括以下数组元素包含一个空字符串

因此,如果字符串是“THExxQUICKxxxxBROWNxxFOX”,StringSplitOptions.None将在数组中返回“xxxx”部分的空条目,而StringSplitOptions.RemoveEmptyEntries不会。

这里有一个重载拆分字符串

"THExxQUICKxxBROWNxxFOX".Split(new [] {"xx"}, StringSplitOptions.None);

我通常喜欢使用我自己的扩展:

string data = "THExxQUICKxxBROWNxxFOX";var dataspt = data.Split("xx");//>THE  QUICK  BROWN  FOX

//the extension class must be declared as staticpublic static class StringExtension{public static string[] Split(this string str, string splitter){return str.Split(new[] { splitter }, StringSplitOptions.None);}}

但是,如果Microsoft决定在以后的版本中包含此方法重载,这将导致Exception。这也是Microsoft在此期间未包含此方法的可能原因:至少我工作的一家公司在其所有C#项目中使用了这种扩展。

如果该方法不存在,也可以在运行时有条件地定义该方法。

最简单的方法是使用String.Replace

string myString = "THExxQUICKxxBROWNxxFOX";mystring = mystring.Replace("xx", ", ");

或者更简单地说:

string myString = "THExxQUICKxxBROWNxxFOX".Replace("xx", ", ");
string data = "THExxQUICKxxBROWNxxFOX";
return data.Replace("xx","|").Split('|');

只需仔细选择替换字符(选择一个不太可能已经存在于字符串中的字符)!

前面的答案都是正确的。我更进一步,通过在String上定义延拓法来让C#为我工作:

public static class Extensions{public static string[] Split(this string toSplit, string splitOn) {return toSplit.Split(new string[] { splitOn }, StringSplitOptions.None);}}

这样我就可以在任何字符串上调用它,就像我第一次尝试完成这个任务时天真地期望的那样:

"a big long string with stuff to split on".Split("g str");

这也很容易:

string data = "THExxQUICKxxBROWNxxFOX";string[] arr = data.Split("xx".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

从. NET Core 2.0开始,有一个接受字符串的覆盖。

所以现在你可以做"THExxQUICKxxBROWNxxFOX".Split("xx")

https://learn.microsoft.com/en-us/dotnet/api/system.string.split?view=netcore-2.0#System_String_Split_System_String_System_StringSplitOptions_

先创建这个函数。

string[] xSplit(string str, string sep) {return str.Split(new [] {sep}, StringSplitOptions.None);}

然后像这样使用它。

xSplit("THExxQUICKxxBROWNxxFOX", "xx");