String | C#
- String | C#
danger
string no C# são imutáveis e a cada alteração ele retorna um novo objeto o que aloca mais memória
O que é uma String em C#
- Em C#,
stringé um tipo por referência que representa texto (sequência de caracterescharem UTF-16). - Isso pode gerar consumo excessivo de memória em operações repetitivas. Nesses casos, prefira
StringBuilder.
string a = "Olá";
string b = a; // aponta para a mesma referência
a += " Mundo"; // cria uma NOVA string
Console.WriteLine(b); // "Olá"
Criação de Strings
string literal = "Texto simples";
string comEscape = "Linha 1\nLinha 2";
string verbatim = @"C:\Users\Nome\Arquivo.txt"; // ignora caracteres de escape
string interpolada = $"Hoje é {DateTime.Now:dd/MM/yyyy}";
Concatenação e Interpolação
- Concatenação com
+: simples, mas cria novas instâncias. string.Concat/string.Join: mais performáticos.- Interpolação (
$"..."): legível e eficiente.
string nome = "João";
int idade = 25;
string frase = $"Meu nome é {nome} e tenho {idade} anos.";
Formatação de Strings
Usando string.Format
object[] valores = { "João", 25, "Brasil" };
string msg = string.Format("Meu nome é {0}, tenho {1} anos e sou do {2}.", valores);
danger
Cuidado, precisa estar com 0, 1 para ser trocado pelo valor
Usando .Replace (menos eficiente)
string msg = "Meu nome é {nome}, tenho {idade} anos e sou do {pais}.";
msg = msg.Replace("{nome}", "João")
.Replace("{idade}", "25")
.Replace("{pais}", "Brasil");
Comparação de Strings
.CompareTo
- Usa cultura atual (
CultureInfo.CurrentCulture). nullvem antes de qualquer string.- Retorna
0se igual, menor que0se menor, maior que0se maior.
int result = "a".CompareTo("b"); // < 0
.Equals
- Comparação direta.
- Pode usar
StringComparisonpara controlar regras de cultura e case-insensitive. - Se chamado em
null, lança exceção.
string a = "Olá";
bool igual = a.Equals("olá", StringComparison.OrdinalIgnoreCase);
== Operador
- Internamente chama
string.Equals(a, b). - Seguro contra
null.
string a = null;
bool teste = a == "teste"; // false, sem erro
Tabela Comparativa
| Método | Null-safe | Cultura/Case | Uso recomendado |
|---|---|---|---|
CompareTo | Sim | Cultura atual | Ordenação |
.Equals | Não | Configurável | Comparações explícitas |
== operador | Sim | Ordinal | Comparações simples |
Principais Métodos de String
.Length.Substring(início, tamanho).Contains,.StartsWith,.EndsWith.ToUpper(),.ToLower(),.Trim().PadLeft(),.PadRight().IndexOf,.LastIndexOf.Split(...)string.Join(...)
string texto = " C# Strings ";
Console.WriteLine(texto.Trim().ToUpper()); // "C# STRINGS"
StringBuilder
Use quando precisar modificar strings muitas vezes em loops.
using System.Text;
var sb = new StringBuilder();
for (int i = 0; i < 1000; i++)
sb.Append(i).Append(" ");
string resultado = sb.ToString();
Strings e Performance
- Strings em C# são UTF-16.
- Manipulação intensa pode gerar overhead.
- Alternativas como U8String (biblioteca externa) trazem suporte nativo a UTF-8 para cenários de alta performance (rede, IO, interop).
Exemplo com U8String:
using U8;
var texto = u8("Hello, World!");
var equals = texto == "Hello, World!"u8;
Literais Especiais
- Verbatim (
@): ignora escapes.
string path = @"C:\Users\Joao\Docs";
- Interpolação + Verbatim
string pasta = "Docs";
string path = $@"C:\Users\Joao\{pasta}";
- Raw string literals (C# 11+)
string json = """
{
"nome": "João",
"idade": 25
}
""";
Comparações Avançadas
StringComparison.Ordinal: mais rápido, case-sensitive.StringComparison.OrdinalIgnoreCase: rápido, case-insensitive.StringComparison.InvariantCultureIgnoreCase: útil para normalização independente de cultura.
Boas Práticas
- Prefira interpolação a
string.Format. - Use
StringComparisonpara evitar ambiguidades culturais. - Em concatenações intensivas, use
StringBuilder. - Para alto desempenho em UTF-8, considere
U8String. - Evite cadeias longas de
.Replacequando puder interpolar.
Conclusão
Strings em C# são poderosas, mas exigem atenção em:
- Imutabilidade
- Comparações (
==,.Equals,.CompareTo) - Performance (quando usar
StringBuilderouU8String) - Literais especiais para maior clareza