我正在基于空格拆分字符串,如下所示:
string myStr = "The quick brown fox jumps over the lazy dog";
char[] whitespace = new char[] { ' ', '\t' };
string[] ssizes = myStr.Split(whitespace);
在我想要执行此操作的代码中定义char []数组是很麻烦的。是否有更有效的方法,不需要创建字符数组(如果在不同的地方复制,容易出错)?
答案 0 :(得分:404)
如果您只是致电:
string[] ssize = myStr.Split(null);
或:
string[] ssize = myStr.Split(new char[0]);
然后假设空格是分裂字符。来自string.Split(char[])
method's documentation page。
如果separator参数为
null
或不包含字符,则假定空格字符为分隔符。空格字符由Unicode标准定义,如果传递给Char.IsWhiteSpace
方法,则返回true
。
始终,始终始终阅读文档!
答案 1 :(得分:173)
是的,这里还需要一个答案!
到目前为止,所有解决方案都解决了规范输入的相当有限的域,即 单 空白字符之间的 / em>元素(虽然至少提到问题,但是@cherno的小费)。 但是我提交的除了最模糊的场景之外,所有这些应该产生相同的结果:
string myStrA = "The quick brown fox jumps over the lazy dog";
string myStrB = "The quick brown fox jumps over the lazy dog";
string myStrC = "The quick brown fox jumps over the lazy dog";
string myStrD = " The quick brown fox jumps over the lazy dog";
String.Split
(在此处其他答案中显示的任何风格中)根本不起作用,除非您将RemoveEmptyEntries
选项附加到其中任何一个:
myStr.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
myStr.Split(new char[] {' ','\t'}, StringSplitOptions.RemoveEmptyEntries)
如图所示,当您使用RemoveEmptyEntries
时,省略该选项会产生四种不同的结果(标记为A,B,C和D)与所有四种输入的单一结果:
当然,如果您不喜欢使用选项,只需使用正则表达式: - )
Regex.Split(myStr, @"\s+").Where(s => s != string.Empty)
答案 2 :(得分:42)
如果separator参数为null或不包含字符,则假定空格字符为分隔符。空格字符由Unicode标准定义,如果将它们传递给Char.IsWhiteSpace方法,则返回true。
所以只需调用myStr.Split();
无需传递任何内容,因为 separator 是params
数组。
答案 3 :(得分:10)
为什么不使用?:
string[] ssizes = myStr.Split(' ', '\t');
答案 4 :(得分:3)
请注意,即使使用String.Split(null)
,相邻的空格也不会被视为单个分隔符。如果您的任何令牌被多个空格或制表符分隔,您将在阵列中返回空字符串。
来自文档:
分隔符的每个元素都定义了一个单独的分隔符。如果 两个分隔符相邻,或者在开头找到分隔符 或者此实例的结尾,相应的数组元素包含 空。
答案 5 :(得分:2)
所以不要复制粘贴!提取一个函数来进行拆分并重用它。
public static string[] SplitWhitespace (string input)
{
char[] whitespace = new char[] { ' ', '\t' };
return input.Split(whitespace);
}
代码重用是您的朋友。
答案 6 :(得分:1)
你为什么不这样做:
var ssizes = myStr.Split(" \t".ToCharArray());
.NET 4.0中似乎有一个方法String.ToCharArray()
!
编辑:正如VMAtm指出的那样,the method already existed in .NET 2.0!
答案 7 :(得分:1)
如果重复相同的代码是问题,请在String类上编写一个包含拆分逻辑的扩展方法。
答案 8 :(得分:0)
你可以这样做:
string myStr = "The quick brown fox jumps over the lazy dog";
string[] ssizes = myStr.Split(' ');
MSDN有更多示例和参考:
答案 9 :(得分:0)
你不能内联吗?
var sizes = subject.Split(new char[] { ' ', '\t' });
否则,如果你经常这样做,你总是可以创建常量或包含该char数组的东西。
正如其他人所说,您可以根据文档使用null
或空数组。当你这样做时,它将自动使用空格字符。
var sizes = subject.Split(null);
答案 10 :(得分:0)
您可以使用
var FirstString = YourString.Split()。First();
分割字符串。