C#: Cordas
1. Declaração e inicialização
string é um alias para System.String e é um tipo de referência imutável. Uma vez criada, o conteúdo de uma string não pode ser alterado.
▶ Exemplo
string name = "Hello";
string empty = "";
string nullStr = null;
string fromChar = new string('A', 5);
Console.WriteLine(name);
Console.WriteLine(fromChar);
Hello
AAAAA
2. Imutabilidade das strings
Uma vez criado um objeto string, sua sequência de caracteres não pode ser modificada. Todas as operações de “modificação” retornam uma nova string, deixando a original inalterada.
▶ Exemplo
string a = "Hello";
string b = a;
a = a + " World";
Console.WriteLine(a);
Console.WriteLine(b);
Hello World
Hello
Dica: b ainda aponta para o "Hello" original, enquanto a + " World" gera um objeto de string totalmente novo.
3. Concatenação de strings
Use o operador +, String.Concat() ou String.Join() para combinar várias sequências de caracteres.
▶ Exemplo
string s1 = "Hello" + " " + "World";
string s2 = String.Concat("A", "B", "C");
string s3 = String.Join(", ", new string[] { "apple", "banana", "cherry" });
Console.WriteLine(s1);
Console.WriteLine(s2);
Console.WriteLine(s3);
Hello World
ABC
apple, banana, cherry
4. Interpolação de strings
Use a sintaxe de interpolação $"" ou String.Format() para incorporar variáveis em uma string.
▶ Exemplo
string name = "Alice";
int age = 25;
string s1 = $"My name is {name}, age {age}.";
string s2 = String.Format("My name is {0}, age {1}.", name, age);
string s3 = $"2 + 3 = {2 + 3}";
Console.WriteLine(s1);
Console.WriteLine(s2);
Console.WriteLine(s3);
My name is Alice, age 25.
My name is Alice, age 25.
2 + 3 = 5
Dica: Você pode escrever qualquer expressão em C# entre as chaves de interpolação {} e adicionar especificadores de formato, como {value:F2}.
5. Comparação de cadeias de caracteres
O operador == realiza uma comparação de igualdade de valores em cadeias de caracteres (não uma comparação de referência). Equals(), Compare() e CompareOrdinal() oferecem um controle mais preciso.
▶ Exemplo
string a = "hello";
string b = "hello";
string c = "HELLO";
Console.WriteLine(a == b);
Console.WriteLine(a.Equals(b));
Console.WriteLine(String.Compare(a, c, StringComparison.OrdinalIgnoreCase) == 0);
Console.WriteLine(String.CompareOrdinal(a, c) > 0);
True
True
True
True
Aviso: A string == compara valores, e não referências, o que difere do comportamento da maioria dos outros tipos de referência.
6. Métodos comuns: Comprimento / Subsequência / Substituir / Dividir
Esses são os métodos mais utilizados para operações cotidianas com strings.
▶ Exemplo
string s = "Hello, World!";
Console.WriteLine(s.Length);
Console.WriteLine(s.Substring(7));
Console.WriteLine(s.Substring(0, 5));
Console.WriteLine(s.Replace("World", "C#"));
string parts = "a,b,c";
foreach (string p in parts.Split(','))
{
Console.WriteLine(p);
}
13
World!
Hello
Hello, C#!
a
b
c
7. Métodos comuns: Trim / Contains / Index
Trim() remove os espaços em branco no início e no final, Contains() verifica se há uma subcadeia e IndexOf() / LastIndexOf() localizam posições.
▶ Exemplo
string s = " Hello World ";
Console.WriteLine($"[{s.Trim()}]");
Console.WriteLine(s.Contains("World"));
Console.WriteLine(s.IndexOf("World"));
Console.WriteLine(s.LastIndexOf("o"));
[Hello World]
True
8
7
8. Métodos comuns: Case / StartsWith / EndsWith / Pad / Remove / Insert
Métodos mais práticos de processamento de strings.
▶ Exemplo
string s = "Hello";
Console.WriteLine(s.ToUpper());
Console.WriteLine(s.ToLower());
Console.WriteLine(s.StartsWith("Hel"));
Console.WriteLine(s.EndsWith("llo"));
Console.WriteLine("5".PadLeft(3, '0'));
Console.WriteLine("5".PadRight(3, '0'));
string r = "Hello World".Remove(5);
Console.WriteLine(r);
string ins = "H World".Insert(1, "ello");
Console.WriteLine(ins);
HELLO
hello
True
True
005
500
Hello
Hello World
9. Strings verbatim e strings raw
As strings verbatim @"" não processam sequências de escape, o que as torna ideais para caminhos de arquivos. O C# 11 introduziu literais de string bruta """ para conteúdo de várias linhas que não requer escape.
▶ Exemplo
string path = @"C:\Users\Doc\file.txt";
string json = """
{
"name": "Alice",
"age": 25
}
""";
Console.WriteLine(path);
Console.WriteLine(json.Trim());
C:\Users\Doc\file.txt
{
"name": "Alice",
"age": 25
}
Dica: Em strings verbatim, uma aspa dupla é escrita como "". Literais de string brutos começam e terminam com pelo menos três aspas.
10. Visão geral do StringBuilder
Ao concatenar strings repetidamente em um loop, string cria um novo objeto a cada vez, o que prejudica o desempenho. StringBuilder opera em um buffer interno e gera a string final apenas uma vez.
▶ Exemplo
using System.Text;
var sb = new StringBuilder();
for (int i = 0; i < 5; i++)
{
sb.Append(i);
sb.Append(" ");
}
Console.WriteLine(sb.ToString().Trim());
0 1 2 3 4
Dica: Prefira StringBuilder ao concatenar muitas cadeias de caracteres em um loop para reduzir significativamente as alocações de memória.
11. Codificação de caracteres
As strings em C# utilizam a codificação UTF-16. Um char ocupa 2 bytes (uma unidade de código UTF-16).
▶ Exemplo
char ch = 'A';
Console.WriteLine(ch);
Console.WriteLine((int)ch);
Console.WriteLine(sizeof(char));
A
65
2
❓ Perguntas Frequentes
P: A string
==compara referências ou valores? R: Valores. O operador==para strings foi sobrecarregado para realizar uma comparação de igualdade de conteúdo.
P: Por que devo usar o StringBuilder para concatenação de strings em loops? R: Como o
stringé imutável, cada concatenação cria um novo objeto. O StringBuilder modifica um buffer e só gera a string final no final.
P: Qual é a diferença entre uma string literal
@""e uma string comum? R: As strings literais não processam sequências de escape (como\n,\t); as barras invertidas são preservadas literalmente, tornando-as ideais para caminhos de arquivos e expressões regulares.
P: O que acontece se o
Substringultrapassar o limite? R: Ele gera uma exceçãoArgumentOutOfRangeException. Você deve verificar o comprimento antes de chamá-lo.
📖 Resumo
stringé um tipo de referência imutável e um alias paraSystem.String- Concatenação:
+,String.Concat(),String.Join() - Interpolação:
$""eString.Format() - Comparação:
==compara valores;Equals()eCompare()oferecem mais opções - Métodos comuns:
Length,Substring,Replace,Split,Trim,Contains,IndexOf,ToUpper,ToLower,StartsWith,EndsWith,PadLeft,PadRight,Remove,Insert - Strings verbatim
@""desativam o escape; literais de string brutos"""suportam conteúdo em várias linhas StringBuilderé ideal para concatenação repetida em loops, melhorando o desempenho- As sequências de caracteres utilizam a codificação UTF-16, e
charocupa 2 bytes
📝 Exercícios
- Declare uma variável de tipo string e use interpolação para exibir
"My name is XXX, and I am XX years old." - Escreva um programa que receba uma string separada por vírgulas
"a,b,c,d", a divida usandoSplite imprima cada elemento em uma linha separada - Corte a sequência
" Hello World ", depois substitua"World"por"C#"e exiba o resultado - Use
StringBuilderpara concatenar os números de 1 a 100, um por linha, e exibir a sequência final - Defina um caminho de arquivo do Windows
C:\Program Files\MyApp\config.jsonusando uma string literal e exiba-o