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

CSHARP
string name = "Hello";
string empty = "";
string nullStr = null;
string fromChar = new string('A', 5);
Console.WriteLine(name);
Console.WriteLine(fromChar);
▶ Experimente
TEXT 📖 Somente leitura
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

CSHARP
string a = "Hello";
string b = a;
a = a + " World";
Console.WriteLine(a);
Console.WriteLine(b);
▶ Experimente
TEXT 📖 Somente leitura
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

CSHARP
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);
▶ Experimente
TEXT 📖 Somente leitura
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

CSHARP
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);
▶ Experimente
TEXT 📖 Somente leitura
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

CSHARP
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);
▶ Experimente
TEXT 📖 Somente leitura
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

CSHARP
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);
}
▶ Experimente
TEXT 📖 Somente leitura
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

CSHARP
string s = "  Hello World  ";
Console.WriteLine($"[{s.Trim()}]");
Console.WriteLine(s.Contains("World"));
Console.WriteLine(s.IndexOf("World"));
Console.WriteLine(s.LastIndexOf("o"));
▶ Experimente
TEXT 📖 Somente leitura
[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

CSHARP
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);
▶ Experimente
TEXT 📖 Somente leitura
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

CSHARP
string path = @"C:\Users\Doc\file.txt";
string json = """
    {
        "name": "Alice",
        "age": 25
    }
    """;
Console.WriteLine(path);
Console.WriteLine(json.Trim());
▶ Experimente
TEXT 📖 Somente leitura
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

CSHARP
using System.Text;

var sb = new StringBuilder();
for (int i = 0; i < 5; i++)
{
    sb.Append(i);
    sb.Append(" ");
}
Console.WriteLine(sb.ToString().Trim());
▶ Experimente
TEXT 📖 Somente leitura
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

CSHARP
char ch = 'A';
Console.WriteLine(ch);
Console.WriteLine((int)ch);
Console.WriteLine(sizeof(char));
▶ Experimente
TEXT 📖 Somente leitura
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 Substring ultrapassar o limite? R: Ele gera uma exceção ArgumentOutOfRangeException. Você deve verificar o comprimento antes de chamá-lo.

📖 Resumo

📝 Exercícios

  1. Declare uma variável de tipo string e use interpolação para exibir "My name is XXX, and I am XX years old."
  2. Escreva um programa que receba uma string separada por vírgulas "a,b,c,d", a divida usando Split e imprima cada elemento em uma linha separada
  3. Corte a sequência " Hello World ", depois substitua "World" por "C#" e exiba o resultado
  4. Use StringBuilder para concatenar os números de 1 a 100, um por linha, e exibir a sequência final
  5. Defina um caminho de arquivo do Windows C:\Program Files\MyApp\config.json usando uma string literal e exiba-o
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%