Introdução: Por que a questão de repetir um caractere se tornou icônica
\n\nSe 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\nNeste 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\nPara 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
O problema: Por que não usar um loop for
\n\nQuando um iniciante ouve "repetir caractere N vezes", a primeira ideia que vem à mente é um loop for:
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\nEssa 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.
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".
Conclusão: loop com concatenação é prejudicial. Mas existem outras abordagens mais eficientes.
\n\nPrincipais formas de repetir um caractere em C#
\n\nVamos 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\n1. StringBuilder clássico
\n\nO primeiro passo para a otimização é usar StringBuilder. Ele não cria uma nova string a cada adição, mas trabalha com um buffer:
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\nObserve 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.
Desempenho: O(n). Para 100.000 caracteres, esse método executa em ~1-2 ms.
\n\n2. Array de caracteres + new string
\n\nEste é 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\nstring 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\nPor 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.
Desempenho: