我正在基于空白拆分字符串,如下所示:
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 []数组,这很麻烦。有没有更有效的方法不需要创建字符数组(如果在不同位置复制,则容易出错)?
Answers:
如果您仅致电:
string[] ssize = myStr.Split(null);
要么:
string[] ssize = myStr.Split(new char[0]);
则假定空白是分隔符。从string.Split(char[])
方法的文档页面。
如果分隔符参数为
null
字符或不包含任何字符,则假定空格字符为分隔符。空格字符由Unicode标准定义,true
如果将它们传递给Char.IsWhiteSpace
方法,则将其返回。
总是,总是,总是阅读文档!
(char[])null
稍好一点,因为它避免了创建新对象。(您不能null
与任何options
重载一起使用)。
null
,是否仍需要指定StringSplitOption.RemoveEmptyEntries
或默认情况下将其忽略?
是的,这里还需要一个答案!
到目前为止,所有解决方案都解决了规范输入的有限领域,即:元素之间的单个空格字符(尽管至少要提到问题,但要在@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)
如图所示,省略选项会产生四个不同的结果(标记为A,B,C和D),而使用时则来自所有四个输入的单个结果RemoveEmptyEntries
:
当然,如果您不喜欢使用选项,请使用regex替代方法:-)
Regex.Split(myStr, @"\s+").Where(s => s != string.Empty)
CapitalizeEveryWord("This is line one.\n \nThis is line three.")
.Where(s => s != string.Empty)
了正则表达式。由于您指定了\s+
(任意数量的空格),因此两者之间不能有空项目。
您为什么不使用?:
string[] ssizes = myStr.Split(' ', '\t');
您为什么不这样做:
var ssizes = myStr.Split(" \t".ToCharArray());
String.ToCharArray()
NET 4.0中似乎有一种方法!
编辑:正如VMAtm所指出的,该方法已经存在于.NET 2.0中!
如果问题是重复相同的代码,请在封装拆分逻辑的String类上编写扩展方法。
您可以这样做:
string myStr = "The quick brown fox jumps over the lazy dog";
string[] ssizes = myStr.Split(' ');
MSDN有更多示例和参考: