C# 在字符串中指定空白的最佳方法。拆分操作

C# 在字符串中指定空白的最佳方法。拆分操作,c#,string,C#,String,我根据空格拆分字符串,如下所示: 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提供了更多示例和参考:

为什么不使用:

string[] ssizes = myStr.Split(' ', '\t');

你为什么不这样做呢:

var ssizes = myStr.Split(" \t".ToCharArray());
在.NET4.0中似乎有一种方法

编辑:正如VMAtm指出的那样,

如果您只需拨打:

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

然后,假定空白是分割字符。从

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

总是,总是,总是阅读文档

根据:

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


所以只需调用
myStr.Split()不需要传入任何内容,因为分隔符是一个
参数
数组。

不能内联执行吗

var sizes = subject.Split(new char[] { ' ', '\t' });
否则,如果您经常这样做,您总是可以创建常量或包含该字符数组的内容

正如其他人所指出的,根据文档,您也可以使用
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)时,相邻的空格也不会被视为单个分隔符。如果您的任何令牌用多个空格或制表符分隔,那么将在数组中返回空字符串

从文件中:

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


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

到目前为止,所有的解决方案都解决了规范输入的相当有限的领域,也就是说:元素之间有一个单一的空格字符(尽管@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
(在这里的其他答案中显示的任何一种风格中)如果不将
removemptyEntries
选项与以下任一选项连接起来,就无法正常工作:

myStr.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
myStr.Split(new char[] {' ','\t'}, StringSplitOptions.RemoveEmptyEntries)
如图所示,省略该选项会产生四种不同的结果(标记为A、B、C和D),与使用
removeMptyEntries
时所有四种输入的单一结果相比:

当然,如果您不喜欢使用选项,只需使用regex选项:-)

你可以用

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


拆分字符串。

执行以下操作:myStr.split(“”);不起作用?如果我理解正确,这将只搜索一个空格,而不是通用空格。请参阅可能的重复项,但后面的答案有SplitStringOptions。此方法在.NET2.0中!!!没有需要两个字符的拆分重载。@takrl:Look public string[]Split(params char[]separator)。NET v2是的,这需要一个字符数组。您的代码段传递了两个单独的字符。@takrl:您知道关键字是什么吗???非常酷,+1。可能被否决的人也不知道。按空格分割的问题是,如果必须重新组合,你不知道要放回哪个空格字符。
(char[])null
稍微好一点,因为它可以避免创建新对象。(您不能将
null
与任何
选项
重载一起使用)。@RossPresser:将字符串重新组合在一起是一个完全不同的问题,因此我不会说这是一个问题。但是,如果您所需要做的就是将字符串按原来的方式重新组合起来,那么也许最好保留原始的.愚蠢的问题,但是如果您使用
null
,您是否仍然需要指定
stringsplit选项。删除空条目
,或者默认情况下忽略它们?@RossPresser:由于String.Split没有提供任何跟踪用于拆分字符串的字符的机制,您的观察结果与此无关:使用String.Split无法实现您的搜索,所以这需要一个不同的问答。对不起,这并不能真正回答问题。坎贝尔:是的,是这样的:OP要求一种解决方案,它不需要到处复制字符数组。一个显而易见的解决方案是创建一个函数来完成任务。这个答案指出这样一个函数可以是一个扩展方法。(答案可以通过显示执行此操作的代码来改进…)正如我在前面的评论中提到的,有时您希望在对非空白元素执行操作后将字符串重新组合在一起。在这种情况下,将连续的空格视为单个分隔符通常是错误的。我认为,@RossPresser,我的限定词“在除最模糊的情况外的所有情况下”都涵盖了这一点,因为即使要重新组合元素,我也很难有一个我关心多个空格的情况。我想要一个标准形式——每个标准形式之间有一个空格。因此,我恭敬地表示不同意——这将是“很少出错”而不是“通常出错”
myStr.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
myStr.Split(new char[] {' ','\t'}, StringSplitOptions.RemoveEmptyEntries)
Regex.Split(myStr, @"\s+").Where(s => s != string.Empty)