我一直在使用 Split()
方法来拆分字符串,但这似乎仅在您按字符拆分字符串时才有效。有没有办法拆分 string
,另一个字符串是按参数拆分的?
我尝试将拆分器转换为字符数组,但没有成功。
换句话说,我想拆分 string
:
THExxQUICKxx棕色NxxFOX
通过 xx
,并返回一个包含值的数组:
THE, QUICK, 棕色, 狐狸
为了按字符串拆分,您必须使用 string array overload。
string data = "THExxQUICKxxBROWNxxFOX";
return data.Split(new string[] { "xx" }, StringSplitOptions.None);
编辑:请参阅@Danation's answer for newer/less versbose 重载
有一个 overload of Split 接受字符串。
"THExxQUICKxxBROWNxxFOX".Split(new [] { "xx" }, StringSplitOptions.None);
您可以使用这些 StringSplitOptions 中的任何一个
无 - 返回值包括包含空字符串的数组元素
RemoveEmptyEntries - 返回值不包括包含空字符串的数组元素
因此,如果字符串是“THExxQUICKxxxxBROWNxxFOX”,StringSplitOptions.None
将在数组中为“xxxx”部分返回一个空条目,而 StringSplitOptions.RemoveEmptyEntries
不会。
Split(String[], StringSplitOptions)
Regex.Split(string, "xx")
是我通常这样做的方式。
当然你需要:
using System.Text.RegularExpressions;
或者 :
System.Text.RegularExpressions.Regex.Split(string, "xx")
但话又说回来,我一直都需要那个图书馆。
RegEx.Split
比简单的 String.Split
成本要高得多。
Regex.Escape
,这将转义任何正则表达式元字符。
有 String.Split 的重载:
"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 static
public static class StringExtension
{
public static string[] Split(this string str, string splitter)
{
return str.Split(new[] { splitter }, StringSplitOptions.None);
}
}
但是,如果 Microsoft 决定在以后的版本中包含此方法重载,这将导致异常。这也是微软在此期间没有包含这种方法的可能原因:至少我工作过的一家公司在他们所有的 C# 项目中都使用了这种扩展。
如果该方法不存在,也可以在运行时有条件地定义该方法。
params string[] splitter
作为第二个参数并将 new[] {splitter}
更改为 splitter
以支持多个分隔符。
从 .NET Core 2.0 开始,有一个采用字符串的覆盖。
所以现在你可以做"THExxQUICKxxBROWNxxFOX".Split("xx")
。
前面的答案都是正确的。我更进一步,通过在 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";
return data.Replace("xx","|").Split('|');
只需仔细选择替换字符(选择一个不太可能出现在字符串中的字符)!
|
字符怎么办,因此我认为使用它很危险。
先创建这个函数。
string[] xSplit(string str, string sep) {
return str.Split(new [] {sep}, StringSplitOptions.None);
}
然后像这样使用它。
xSplit("THExxQUICKxxBROWNxxFOX", "xx");
这也很容易:
string data = "THExxQUICKxxBROWNxxFOX";
string[] arr = data.Split("xx".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
"THExQUICK"
最简单的方法是使用 String.Replace
:
string myString = "THExxQUICKxxBROWNxxFOX";
mystring = mystring.Replace("xx", ", ");
或者更简单地说:
string myString = "THExxQUICKxxBROWNxxFOX".Replace("xx", ", ");
xx
所在的位置。
不定期副业成功案例分享
string.Split
的 10 倍左右。string[] Split(string pattern)
,这是我能想到的最自然的用法,但它不存在。我以前写过 C,所以我习惯于 char 数组,但我仍然讨厌看到char[]
在 C# 代码中弹出,因为它突然将我的注意力从流级别拖到字节级别。有人知道为什么 C# 库的人会设计这样的 Split 方法吗?如果有充分的理由,尽管不便,我可能会尝试感谢它。data.Split("xx")
?