在字符串中指定空格的最佳方法。分离操作

我拆分一个字符串基于空白如下:

string myStr = "The quick brown fox jumps over the lazy dog";


char[] whitespace = new char[] { ' ', '\t' };
string[] ssizes = myStr.Split(whitespace);

在我想要这样做的代码中处处定义char[]数组是令人厌烦的。有没有更有效的方法,不需要创建字符数组(如果复制到不同的地方,很容易出错)?

346716 次浏览

你可以这样做:

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[] ssizes = myStr.Split(' ', '\t');

你为什么不这样做

var ssizes = myStr.Split(" \t".ToCharArray());

在。net 4.0中似乎有一个方法String.ToCharArray() !

正如VMAtm所指出的,这个方法在。net 2.0中已经存在了! . 编辑:

如果你打电话:

string[] ssize = myStr.Split(null); //Or myStr.Split()

或者:

string[] ssize = myStr.Split(new char[0]);

然后假定空格是分隔字符。从string.Split(char[])方法文档页

如果分隔符参数为null或不包含任何字符,则假定空白字符为分隔符。空白字符由Unicode标准定义,如果它们被传递给Char.IsWhiteSpace方法,则返回true

总是,总是,总是读取文档!

根据文档:

如果分隔符参数为空或不包含字符,则假定空白字符为分隔符。空白字符由Unicode标准定义,如果传递给Char则返回true。IsWhiteSpace方法。

不需要传递任何东西,因为分隔符是一个params数组。

你不能内联吗?

var sizes = subject.Split(new char[] { ' ', '\t' });

否则,如果你经常这样做,你总是可以创建一个常量或者包含那个char数组的东西。

正如其他人所注意到的,你也可以根据文档使用null或空数组。当你这样做时,它将自动使用空白字符。

var sizes = subject.Split(null);

所以不要复制粘贴!提取一个函数来进行拆分并重用它。

public static string[] SplitWhitespace (string input)
{
char[] whitespace = new char[] { ' ', '\t' };
return input.Split(whitespace);
}

代码重用是你的朋友。

如果问题在于重复相同的代码,那么在封装拆分逻辑的String类上编写一个扩展方法。

注意,即使使用String.Split(null),相邻的空格也不会被视为单个分隔符。如果任何标记用多个空格或制表符分隔,则将在数组中返回空字符串。

从文档中可以看到:

分隔符的每个元素定义一个单独的分隔符。如果 两个分隔符相邻,或者在开头找到一个分隔符 或此实例的结束,对应的数组元素包含 空的。< / p >

是的,这里还需要一个答案!

到目前为止,所有的解决方案都解决了相当有限的标准输入域,即:< em >单< / 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),而不是所有四个输入的单一结果:

字符串。Split vs Regex。分裂”></p>


<p>当然,如果你不喜欢使用选项,只使用regex替代:-)</p>


<pre><code>Regex.Split(myStr, @

你可以使用

var FirstString = YourString.Split().First();

拆分字符串,并获得其在空格之前的第一次出现。