Compartilhar via


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

O método String.Split cria uma matriz de subcadeias, dividindo a cadeia de caracteres de entrada com base em um ou mais delimitadores. Esse método geralmente é a maneira mais fácil de separar uma cadeia de caracteres em limites de palavra.

Observação

Os exemplos de C# neste artigo são executados no executador de código embutido Try.NET e no playground. Clique no botão Executar para executar um exemplo em uma janela interativa. Ao executar o código, é possível modificá-lo e executar o código modificado clicando em Executar novamente. O código modificado será executado na janela interativa ou, se a compilação falhar, a janela interativa exibirá todos as mensagens de erro do compilador C#.

Dica

Você pode usar a assistência de IA para dividir uma cadeia de caracteres.

Dividir uma cadeia de caracteres em palavras

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)
{
    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 até o valor retornado pela propriedade Array.Length 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++)
{
    Console.WriteLine($"Index {i}: <{words[i]}>");
}

O String.Split tem muitas sobrecargas. Essas sobrecargas personalizam o comportamento para dividir cadeias de caracteres:

  • Você pode especificar separadores como char valores ou string valores.
  • Você pode especificar um separador ou vários separadores. Se você especificar vários separadores, todos eles deverão ser do mesmo tipo (ou charstring).
  • Você pode especificar o número máximo de subcadeias de caracteres a serem retornadas.
  • Você pode especificar se caracteres separadores repetidos são ignorados ou produzir subcadeias de caracteres vazias no valor retornado.
  • Você pode especificar se o espaço em branco à esquerda e à direita é removido das subcadeias de caracteres retornadas.

Os exemplos restantes usam sobrecargas diferentes para mostrar cada um desses comportamentos.

Para obter mais informações sobre índices, consulte o artigo Explorar índices e intervalos .

Especificar vários separadores

O String.Split pode usar vários caracteres separadores. O exemplo a seguir utiliza 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";
Console.WriteLine($"Original text: '{text}'");

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

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

As 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";
Console.WriteLine($"Original text: '{text}'");

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

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

O String.Split pode receber 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 um único caractere).

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

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

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

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

Limitar o tamanho da saída

O exemplo a seguir mostra como limitar a saída às quatro primeiras subcadeias de caracteres na cadeia de caracteres de origem.

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

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

Remover subcadeias de caracteres vazias

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 separador.

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

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

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

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

Cortar espaço em branco

O exemplo a seguir mostra o efeito de cortar entradas:

string numerals = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10";
string[] words = numerals.Split(',', StringSplitOptions.TrimEntries);

Console.WriteLine("Trimmed entries:");
foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}
words = numerals.Split(',', StringSplitOptions.None);
Console.WriteLine("Untrimmed entries:");
foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}

As entradas untrimmed têm espaço em branco extra antes dos numerais.

Usar IA para dividir uma cadeia de caracteres

Você pode usar ferramentas de IA, como o GitHub Copilot, para gerar código para dividir cadeias de caracteres usando String.Split em C#. Você pode personalizar o prompt para usar cadeias de caracteres e delimitadores de acordo com seus requisitos.

O texto a seguir mostra um exemplo de prompt para o Copilot Chat:

Generate C# code to use Split.String to split a string into substrings.
Input string is "You win some. You lose some." Delimiters are space and period.
Provide example output.

O GitHub Copilot é alimentado por IA, portanto é passível de surpresas e erros. Para obter mais informações, consulte Perguntas frequentes sobre o Copilot.

Confira também