Partilhar via


Como separar cadeias de caracteres usando String.Split em C#

O String.Split método cria uma matriz de substrings dividindo a string de entrada com base em um ou mais delimitadores. Esse método geralmente é a maneira mais fácil de separar uma cadeia de caracteres nos limites de palavras. Ele também é usado para dividir strings em outros caracteres ou strings específicos.

Nota

Os exemplos de C# neste artigo são executados no Try.NET corredor de código embutido e playground. Selecione o botão Executar para executar um exemplo em uma janela interativa. Depois de executar o código, você pode modificá-lo e executar o código modificado selecionando Executar novamente. O código modificado é executado na janela interativa ou, se a compilação falhar, a janela interativa exibe todas as mensagens de erro do compilador C#.

O código a seguir divide uma frase comum em uma matriz de cadeias de caracteres para cada palavra.

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');

foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

Cada instância de um caractere separador produz um valor na matriz retornada. Como as matrizes em C# são indexadas a zero, cada cadeia de caracteres na matriz é indexada de 0 ao valor retornado pela Array.Length propriedade menos 1:

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');

for (int i = 0; i < words.Length; i++)
{
    System.Console.WriteLine($"Index {i}: <{words[i]}>");
}

Caracteres separadores consecutivos produzem a cadeia de caracteres vazia como um valor na matriz retornada. Você pode ver como uma cadeia de caracteres vazia é criada no exemplo a seguir, que usa o caractere de espaço como um separador.

string phrase = "The quick brown    fox     jumps over the lazy dog.";
string[] words = phrase.Split(' ');

foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

Esse comportamento facilita para formatos como arquivos CSV (valores separados por vírgula) que representam dados tabulares. As vírgulas consecutivas representam uma coluna em branco.

Você pode passar um parâmetro opcional StringSplitOptions.RemoveEmptyEntries para excluir quaisquer cadeias de caracteres vazias na matriz retornada. Para um processamento mais complicado da coleção retornada, você pode usar o LINQ para manipular a sequência de resultados.

String.Split Pode usar vários caracteres separadores. O exemplo a seguir usa espaços, vírgulas, pontos, dois pontos e tabulações como caracteres de separação, que são passados para Split em uma matriz. O loop na parte inferior do código exibe cada uma das palavras na matriz retornada.

char[] delimiterChars = { ' ', ',', '.', ':', '\t' };

string text = "one\ttwo three:four,five six seven";
System.Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiterChars);
System.Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

Instâncias consecutivas de qualquer separador produzem a cadeia de caracteres vazia na matriz de saída:

char[] delimiterChars = { ' ', ',', '.', ':', '\t' };

string text = "one\ttwo :,five six seven";
System.Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiterChars);
System.Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

String.Split pode usar uma matriz de cadeias de caracteres (sequências de caracteres que atuam como separadores para analisar a cadeia de caracteres de destino, em vez de caracteres únicos).

string[] separatingStrings = { "<<", "..." };

string text = "one<<two......three<four";
System.Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(separatingStrings, System.StringSplitOptions.RemoveEmptyEntries);
System.Console.WriteLine($"{words.Length} substrings in text:");

foreach (var word in words)
{
    System.Console.WriteLine(word);
}

Consulte também