我拆分一个字符串基于空白如下:
string myStr = "The quick brown fox jumps over the lazy dog";
char[] whitespace = new char[] { ' ', '\t' };
string[] ssizes = myStr.Split(whitespace);
在我想要这样做的代码中处处定义char[]数组是令人厌烦的。有没有更有效的方法,不需要创建字符数组(如果复制到不同的地方,很容易出错)?
我拆分一个字符串基于空白如下:
string myStr = "The quick brown fox jumps over the lazy dog";
char[] whitespace = new char[] { ' ', '\t' };
string[] ssizes = myStr.Split(whitespace);
在我想要这样做的代码中处处定义char[]数组是令人厌烦的。有没有更有效的方法,不需要创建字符数组(如果复制到不同的地方,很容易出错)?
当前回答
你可以这样做:
string myStr = "The quick brown fox jumps over the lazy dog";
string[] ssizes = myStr.Split(' ');
MSDN有更多的例子和参考:
http://msdn.microsoft.com/en-us/library/b873y76a.aspx
其他回答
注意,相邻的空格不会被视为单个分隔符,即使使用String.Split(null)也是如此。如果任何标记用多个空格或制表符分隔,则将在数组中返回空字符串。
从文档中可以看到:
分隔符的每个元素定义一个单独的分隔符。如果 两个分隔符相邻,或者在开头找到一个分隔符 或此实例的结束,对应的数组元素包含 空的。
根据文档:
如果分隔符参数为空或不包含字符,则假定空白字符为分隔符。空白字符由Unicode标准定义,如果传递给Char则返回true。IsWhiteSpace方法。
调用mystr。split ();不需要传入任何东西,因为separator是一个params数组。
是的,这里还需要一个答案!
到目前为止,所有的解决方案都解决了规范输入的相当有限的域,即:元素之间的单个空格字符(尽管向@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";
字符串。分裂(在这里的其他答案中所显示的任何口味)根本不能很好地工作,除非你将RemoveEmptyEntries选项与以下任何一个附加:
myStr.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
myStr.Split(new char[] {' ','\t'}, StringSplitOptions.RemoveEmptyEntries)
如图所示,当您使用RemoveEmptyEntries时,省略该选项会产生四个不同的结果(标记为A, B, C和D),而不是所有四个输入的单个结果:
当然,如果你不喜欢使用选项,只使用regex替代:-)
Regex.Split(myStr, @"\s+").Where(s => s != string.Empty)
你可以这样做:
string myStr = "The quick brown fox jumps over the lazy dog";
string[] ssizes = myStr.Split(' ');
MSDN有更多的例子和参考:
http://msdn.microsoft.com/en-us/library/b873y76a.aspx
如果问题在于重复相同的代码,那么在封装拆分逻辑的String类上编写一个扩展方法。