我正在基于空格分割字符串,如下所示:
string myStr = "The quick brown fox jumps over the lazy dog";
char[] whitespace = new char[] { ' ', '\t' };
string[] ssizes = myStr.Split(whitespace);
在我想要执行此操作的代码中定义char []数组是很麻烦的。是否有更有效的方法,不需要创建字符数组(如果在不同的地方复制,容易出错)?
如果你只是打电话:
string[] ssize = myStr.Split(null);
要么:
string[] ssize = myStr.Split(new char[0]);
然后假设空格是分裂字符。来自string.Split(char[])
method's documentation page。
如果separator参数是
null
或不包含字符,则假定空格字符是分隔符。空格字符由Unicode标准定义,如果传递给true
方法,则返回Char.IsWhiteSpace
。
始终,始终,始终阅读文档!
你不能在网上做吗?
var sizes = subject.Split(new char[] { ' ', '\t' });
否则,如果你经常这样做,你总是可以创建常量或包含该char数组的东西。
正如其他人所说,你可以根据文档也使用null
或空数组。当你这样做时,它将自动使用空白字符。
var sizes = subject.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
(在这里的其他答案中显示的任何风格)根本不能很好地工作,除非你将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)
如果separator参数为null或不包含任何字符,则假定空格字符为分隔符。空格字符由Unicode标准定义,如果传递给Char.IsWhiteSpace方法,则返回true。
所以只需调用myStr.Split();
没有必要传递任何东西,因为separator是一个params
数组。
你为什么不用?:
string[] ssizes = myStr.Split(' ', '\t');
请注意,即使使用String.Split(null)
,相邻的空格也不会被视为单个分隔符。如果您的任何令牌被多个空格或制表符分隔,您将在阵列中返回空字符串。
从文档:
分隔符的每个元素定义一个单独的分隔符。如果两个分隔符相邻,或者在此实例的开头或结尾处找到分隔符,则相应的数组元素包含Empty。
所以不要复制粘贴!提取一个函数来进行拆分并重用它。
public static string[] SplitWhitespace (string input)
{
char[] whitespace = new char[] { ' ', '\t' };
return input.Split(whitespace);
}
代码重用是您的朋友。
如果重复相同的代码是问题,请在String类上编写一个扩展方法,该方法封装了拆分逻辑。
你为什么不这样做:
var ssizes = myStr.Split(" \t".ToCharArray());
似乎在.NET 4.0中有一个方法String.ToCharArray()
!
编辑:正如VMAtm指出的那样,the method already existed in .NET 2.0!
你可以这样做:
string myStr = "The quick brown fox jumps over the lazy dog";
string[] ssizes = myStr.Split(' ');
MSDN有更多示例和参考: