Estou dividindo uma seqüência de caracteres com espaço em branco da seguinte maneira:
string myStr = "The quick brown fox jumps over the lazy dog";
char[] whitespace = new char[] { ' ', '\t' };
string[] ssizes = myStr.Split(whitespace);
É cansativo definir a matriz char [] em todo lugar no meu código que eu quero fazer isso. Existe uma maneira mais eficaz que não exija a criação da matriz de caracteres (que é propensa a erros se copiada em lugares diferentes)?
Respostas:
Se você acabou de ligar:
ou:
o espaço em branco é assumido como o caractere de divisão. Na
string.Split(char[])
página de documentação do método .Sempre, sempre, sempre leia a documentação!
fonte
(char[])null
é um pouco melhor, pois evita a criação de um novo objeto. (Você não pode usarnull
com nenhumaoptions
sobrecarga).null
, ainda precisa especificarStringSplitOption.RemoveEmptyEntries
ou eles são ignorados por padrão?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.Split
(em qualquer um dos sabores mostrados nas outras respostas aqui) simplesmente não funciona bem, a menos que você associe aRemoveEmptyEntries
opção a um destes: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 :-)
fonte
CapitalizeEveryWord("This is line one.\n \nThis is line three.")
.Where(s => s != string.Empty)
ao Regex. Como você especifica\s+
(qualquer número de espaços), não pode haver nenhum item vazio no meio.De acordo com a documentação :
Então basta ligar
myStr.Split();
Não há necessidade de passar nada, porque o separador é umaparams
matriz.fonte
Por que você não usa ?:
fonte
Observe que o espaço em branco adjacente NÃO será tratado como um único delimitador, mesmo quando usado
String.Split(null)
. Se algum de seus tokens for separado por vários espaços ou guias, você receberá as seqüências de caracteres vazias em sua matriz.A partir da documentação:
fonte
Portanto, não copie e cole! Extraia uma função para fazer sua divisão e reutilize-a.
A reutilização de código é seu amigo.
fonte
Por que você não faz isso:
Parece que existe um método
String.ToCharArray()
no .NET 4.0!EDIT: Como o VMAtm indicou, o método já existia no .NET 2.0!
fonte
você pode usar
para dividir a string.
fonte
Você não pode fazê-lo em linha?
Caso contrário, se você fizer exatamente exatamente isso, poderá sempre criar constante ou algo que contenha essa matriz de caracteres.
Como outros observaram, de acordo com a documentação, você também pode usar
null
ou uma matriz vazia. Ao fazer isso, ele usará caracteres de espaço em branco automaticamente.fonte
Se repetir o mesmo código, escreva um método de extensão na classe String que encapsule a lógica de divisão.
fonte
Você pode apenas fazer:
O MSDN tem mais exemplos e referências:
http://msdn.microsoft.com/en-us/library/b873y76a.aspx
fonte