在String.Split操作中指定空格的最佳方法

时间:2011-05-24 13:39:04

标签: c# string

我正在基于空格拆分字符串,如下所示:

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

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

在我想要执行此操作的代码中定义char []数组是很麻烦的。是否有更有效的方法,不需要创建字符数组(如果在不同的地方复制,容易出错)?

11 个答案:

答案 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)与所有四种输入的单一结果:

String.Split vs Regex.Split

当然,如果您不喜欢使用选项,只需使用正则表达式: - )

Regex.Split(myStr, @"\s+").Where(s => s != string.Empty)

答案 2 :(得分:42)

根据documentation

  

如果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有更多示例和参考:

http://msdn.microsoft.com/en-us/library/b873y76a.aspx

答案 9 :(得分:0)

你不能内联吗?

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

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

正如其他人所说,您可以根据文档使用null或空数组。当你这样做时,它将自动使用空格字符。

var sizes = subject.Split(null);

答案 10 :(得分:0)

您可以使用

  

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

分割字符串。