Manipulação de Strings em C# e .NET: O guia completo

.NET

Introdução

Strings são um dos tipos de dados mais utilizados no C#. Seja desenvolvendo uma pequena utilidade ou uma aplicação empresarial complexa, a manipulação de strings desempenha um papel crucial.

Este artigo irá abordar as técnicas essenciais e as melhores práticas para trabalhar com strings em C#. Desde operações básicas até tópicos avançados, cobriremos tudo aqui.


Tópicos abordados

  1. Noções básicas sobre Strings em C#
  2. Imutabilidade de Strings
  3. Concatenação de Strings
  4. Interpolação de Strings
  5. Comparação de Strings
  6. Substrings e pesquisa
  7. Substituindo e removendo caracteres
  8. Dividindo e unindo Strings
  9. StringBuilder para manipulação eficiente
  10. Expressões Regulares
  11. Codificação e decodificação de Strings
  12. Considerações de performance

Noções básicas sobre Strings em C#

Strings em C# são sequências de caracteres representadas pela classe System.String. Strings são imutáveis, o que significa que, uma vez criadas, elas não podem ser alteradas.

string saudacao = "Olá, Mundo!";
Console.WriteLine(saudacao); 
// Saída: Olá, Mundo!

Imutabilidade de Strings

No C#, strings são imutáveis. Qualquer operação que pareça modificar uma string na verdade cria uma nova string.

string original = "Olá";
string modificado = original + ", Mundo!";
Console.WriteLine(original); // Saída: Olá
Console.WriteLine(modificado); // Saída: Olá, Mundo!

Concatenação de Strings

Você pode concatenar strings usando o operador + ou o método String.Concat.

string primeiroNome = "João";
string ultimoNome = "Silva";
string nomeCompleto = primeiroNome + " " + ultimoNome;
Console.WriteLine(nomeCompleto); // Saída: João Silva

// Usando String.Concat
string nomeCompletoConcat = string.Concat(primeiroNome, " ", ultimoNome);
Console.WriteLine(nomeCompletoConcat); // Saída: João Silva

Interpolação de Strings

A interpolação de strings é uma forma moderna e legível de construir strings.

string nome = "Ana";
int idade = 25;
string mensagem = $"Meu nome é {nome} e eu tenho {idade} anos.";
Console.WriteLine(mensagem); // Saída: Meu nome é Ana e eu tenho 25 anos.

Comparação de Strings

O C# fornece vários métodos para comparar strings, incluindo comparações sensíveis e insensíveis a maiúsculas.

string str1 = "olá";
string str2 = "Olá";

// Comparação sensível a maiúsculas
bool iguais = str1 == str2;
Console.WriteLine(iguais); // Saída: False

// Comparação insensível a maiúsculas
bool iguaisIgnoreCase = string.Equals(str1, str2, StringComparison.OrdinalIgnoreCase);
Console.WriteLine(iguaisIgnoreCase); // Saída: True

Substrings e Pesquisa

Você pode extrair partes de uma string usando o método Substring ou encontrar substrings usando métodos como IndexOf e Contains.

string texto = "C# é incrível!";

// Extrair substring
string substring = texto.Substring(3, 2);
Console.WriteLine(substring); // Saída: é

// Procurar uma substring
bool contem = texto.Contains("incrível");
Console.WriteLine(contem); // Saída: True

int posicao = texto.IndexOf("incrível");
Console.WriteLine(posicao); // Saída: 5

Substituindo e removendo caracteres

Os métodos Replace e Remove são úteis para modificar strings.

string frase = "Eu amo programação em C#.";

// Substituir
string atualizado = frase.Replace("C#", "JavaScript");
Console.WriteLine(atualizado); // Saída: Eu amo programação em JavaScript.

// Remover
string encurtado = frase.Remove(7, 3);
Console.WriteLine(encurtado); // Saída: Eu amo programação.

Dividindo e unindo Strings

Você pode dividir uma string em um array ou unir um array em uma string.

string dados = "maçã,banana,laranja";

// Dividir
string[] frutas = dados.Split(',');
foreach (var fruta in frutas)
{
    Console.WriteLine(fruta);
}

// Unir
string unido = string.Join(" | ", frutas);
Console.WriteLine(unido); // Saída: maçã | banana | laranja

StringBuilder para manipulação eficiente

Para operações intensivas com strings, use StringBuilder para melhor performance.

using System.Text;

StringBuilder sb = new StringBuilder();
sb.Append("Olá");
sb.Append(", ");
sb.Append("Mundo!");
Console.WriteLine(sb.ToString()); // Saída: Olá, Mundo!

Expressões Regulares

Expressões regulares são poderosas para correspondência de padrões e extração de texto.

using System.Text.RegularExpressions;

string entrada = "Contato: 123-456-7890";
string padrao = "\d{3}-\d{3}-\d{4}";

Match correspondencia = Regex.Match(entrada, padrao);
if (correspondencia.Success)
{
    Console.WriteLine(correspondencia.Value); // Saída: 123-456-7890
}

Codificação e decodificação de Strings

Você pode converter strings em arrays de bytes e vice-versa usando codificações.

using System.Text;

string texto = "Olá, Mundo!";

// Codificar
byte[] bytes = Encoding.UTF8.GetBytes(texto);

// Decodificar
string decodificado = Encoding.UTF8.GetString(bytes);
Console.WriteLine(decodificado); // Saída: Olá, Mundo!

Considerações de performance

Operações com strings podem impactar a performance devido à imutabilidade. Use StringBuilder para modificações frequentes e prefira string.Concat ao invés do operador + em loops.


Conclusão

Dominar a manipulação de strings no C# é essencial para escrever códigos eficientes e manuteníveis. Compreendendo essas técnicas, você estará mais bem preparado para lidar com dados de texto em suas aplicações. Explore esses métodos e escolha as ferramentas certas para seus casos de uso!

André Baltieri

Programador desde 2003 e 13x Microsoft MVP. Experiência internacional (EUA, Índia e Europa) atuando com consultoria de software para empresas de todos os portes.