Como repetir caracteres corretamente em C#: do código ingênuo à otimização

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que a questão de repetir um caractere se tornou icônica

\n\n

Se você já programou em C#, certamente já se deparou com a tarefa: "Preciso criar uma string composta por N caracteres iguais". Parece simples, não é? Mas foi exatamente essa pergunta no Stack Overflow que acumulou milhares de visualizações e dezenas de respostas. Por quê? Porque por trás da aparente simplicidade, esconde-se um mundo de otimização de desempenho e armadilhas.

\n\n

Neste artigo, não vamos apenas mostrar como repetir um caractere em C#. Vamos percorrer o caminho desde a solução ingênua até técnicas profissionais usadas em sistemas de alta carga. Você descobrirá qual método é mais adequado para repetir um caractere em diferentes cenários e por que alguns conselhos populares são, na verdade, prejudiciais.

\n\n

Para quem este artigo é útil?

\n
    \n
  • Desenvolvedores C# iniciantes que desejam escrever código não apenas funcional, mas eficiente
  • \n
  • Programadores experientes que buscam maneiras de otimizar operações com strings
  • \n
  • Todos que estão se preparando para entrevistas técnicas e querem impressionar com conhecimento interno do .NET
  • \n
\n\n

O problema: Por que não usar um loop for

\n\n

Quando um iniciante ouve "repetir caractere N vezes", a primeira ideia que vem à mente é um loop for:

\n\n
string RepeatChar(char c, int count)\n{\n    string result = "";\n    for (int i = 0; i < count; i++)\n        result += c;\n    return result;\n}\n
\n\n

Essa solução funciona, mas é catastroficamente lenta. Por quê? Porque strings em C# são imutáveis. Cada operação += cria uma nova string, copiando o conteúdo antigo mais um caractere. O resultado é um algoritmo de complexidade O(n²). Para 10 caracteres é imperceptível, mas para 100.000 já é uma eternidade.

\n\n

Vamos ver números reais. Testamos esse método com count = 100.000. Em um processador moderno, leva… vários segundos. E se precisar repetir o caractere um milhão de vezes? O programa simplesmente "trava".

\n\n

Conclusão: loop com concatenação é prejudicial. Mas existem outras abordagens mais eficientes.

\n\n

Principais formas de repetir um caractere em C#

\n\n

Vamos analisar todos os métodos populares discutidos no Stack Overflow e em projetos reais. Testaremos o desempenho de cada um e explicaremos quando usar cada um.

\n\n

1. StringBuilder clássico

\n\n

O primeiro passo para a otimização é usar StringBuilder. Ele não cria uma nova string a cada adição, mas trabalha com um buffer:

\n\n
string RepeatWithStringBuilder(char c, int count)\n{\n    StringBuilder sb = new StringBuilder(count);\n    for (int i = 0; i < count; i++)\n        sb.Append(c);\n    return sb.ToString();\n}\n
\n\n

Observe que definimos a capacidade inicial como count. Isso é importante! Se não especificarmos a capacidade, o StringBuilder precisará realocar memória várias vezes, reduzindo o desempenho.

\n\n

Desempenho: O(n). Para 100.000 caracteres, esse método executa em ~1-2 ms.

\n\n

2. Array de caracteres + new string

\n\n

Este é um dos métodos mais rápidos no .NET. Criamos um array do tamanho desejado, preenchemos com o caractere e passamos para o construtor da string:

\n\n
string RepeatWithArray(char c, int count)\n{\n    char[] chars = new char[count];\n    Array.Fill(chars, c);\n    return new string(chars);\n}\n
\n\n

Por que é rápido? Porque trabalhamos diretamente com a memória: o array é preenchido em uma única passagem, e o construtor new string(char[]) simplesmente copia os dados para o buffer interno da string. Sem operações desnecessárias.

\n\n

Desempenho:

Blogs

Book Recommendations