Sim, é necessário mais uma resposta aqui!
Todas as soluções até agora abordam o domínio bastante limitado da entrada canônica , a saber: um único caractere de espaço em branco entre os elementos (embora seja comum o @cherno pelo menos mencionar o problema). Mas eu afirmo que em todos os cenários, exceto os mais obscuros, a divisão de todos eles deve produzir resultados idênticos:
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
(em qualquer um dos sabores mostrados nas outras respostas aqui) simplesmente não funciona bem, a menos que você associe a RemoveEmptyEntries
opção a um destes:
myStr.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
myStr.Split(new char[] {' ','\t'}, StringSplitOptions.RemoveEmptyEntries)
Como mostra a ilustração, a omissão da opção gera quatro resultados diferentes (rotulados como A, B, C e D) vs. o resultado único de todas as quatro entradas quando você usa RemoveEmptyEntries
:
Obviamente, se você não gosta de usar opções, basta usar a alternativa regex :-)
Regex.Split(myStr, @"\s+").Where(s => s != string.Empty)