1. Procurando uma substring em uma string
Na aula passada, você aprendeu a pegar uma substring de uma string. Agora vamos aprender a encontrar uma string dentro de outra. Pra isso, tem 5 métodos top:
Método Contains: a string contém a substring?
Retorna true se a string passada está contida naquela onde você chamou o método.
string frase = "Vento da mudança";
bool temPalavra = frase.Contains("mudança"); // true
A busca diferencia maiúsculas de minúsculas! "vento".Contains("V") — false.
Método IndexOf: achar a posição da substring
Bem parecido com o IndexOf em arrays: procura a substring na string (do começo pro fim) e retorna o índice da primeira ocorrência.
string texto = "melanciamelancia";
int indice = texto.IndexOf("ancia"); // 2
- Se não encontrar nada, retorna -1.
- Tem alternativa com posição inicial: IndexOf("ancia", 4). Igualzinho array.
Método LastIndexOf: última ocorrência
Também parecido com LastIndexOf em arrays: procura a substring na string (do fim pro começo) e retorna o índice da primeira ocorrência a partir do final.
string repetida = "tarefa tarefa";
int ultima = repetida.LastIndexOf("tarefa"); // 7
String começa/termina com uma substring específica
Muitas vezes você precisa checar se sua string começa (ou termina) com uma substring específica. Pra isso tem dois métodos:
- StartsWith — checa se a string começa com uma substring;
- EndsWith — checa se a string termina com a substring.
string nomeArquivo = "foto.jpg";
bool ehJpg = nomeArquivo.EndsWith(".jpg"); // true
string email = "suporte@empresa.com";
bool ehSuporte = email.StartsWith("suporte"); // true
Se quiser comparar sem diferenciar maiúsculas/minúsculas, passa um parâmetro extra dizendo o modo de comparação (olha a doc do StringComparison.OrdinalIgnoreCase).
2. Método Replace: trocando caracteres e substrings
O método Replace troca todas as ocorrências da string A pela string B. Surgiu pra ajudar com erros de digitação, censura e trocar variáveis em templates! (Brincadeira.)
string endereco = "Londres, rua Baker-street";
string atualizado = endereco.Replace("Londres", "Paris");
Console.WriteLine(atualizado); // "Paris, rua Baker-street"
- Dá pra trocar até caracteres: str.Replace('a', 'z')
- Importante: todas as trocas acontecem na string toda, não só na primeira ocorrência.
3. Método Split: cortando a string em pedaços
O método Split faz o seguinte: pega sua string e corta em partes, usando separadores — caracteres ou strings que vão ser usados pra dividir. O método retorna um array de strings, com os pedaços da string original.
string[] partes = originalString.Split(separator);
- separator — caractere ou array de caracteres que vão ser usados como separador.
Exemplo mais simples
Vamos dividir a string pelo espaço:
string entrada = "maçã pera laranja banana";
string[] frutas = entrada.Split(' '); // vira array ["maçã","pera","laranja","banana"]
Console.WriteLine(frutas[0]); // "maçã"
Console.WriteLine(frutas[1]); // "pera"
Aqui a gente pegou um array de tamanho 4, cada palavra é um elemento separado.
Vários separadores
Às vezes a string pode ter mais de um tipo de separador. Por exemplo, o usuário pode digitar valores separados por espaço, vírgula ou ponto e vírgula.
Nesses casos, dá pra usar um array de caracteres separadores:
string entrada = "maçã, pera; laranja banana";
char[] separadores = { ' ', ',', ';' };
string[] frutas = entrada.Split(separadores, StringSplitOptions.RemoveEmptyEntries);
Bônus: o parâmetro opcional StringSplitOptions.RemoveEmptyEntries tira pedaços vazios. Isso é útil se o usuário digitou vários separadores seguidos — tipo dois espaços ou algo como "maçã,, pera".
Separando por substring
Separadores podem ser strings também, não só caracteres. Por exemplo, se você tem um arquivo CSV com separador ";" ou |:
// Separando por um caractere
string dados = "Ivanov;Petrov;Sidorov";
string[] nomes = dados.Split(';'); // pelo caractere ';'
// Ou, se o separador for uma string:
string log = "2024-01-01::Erro::Não foi possível executar tarefa";
string[] separadores = { "::" };
string[] partes = log.Split(separadores);
4. Método Join: juntando o array de strings de volta
O método Join faz o contrário: recebe um array de strings e junta tudo numa string só, colocando entre os elementos o separador que você escolher.
string resultado = string.Join(separator, arrayOfStrings);
- separator — string que vai ser colocada entre os elementos.
- arrayOfStrings — array ou coleção de strings (string[], List<string> etc).
Exemplo básico
Vamos criar uma string só a partir de um array, separando por vírgula:
string[] itens = { "maçã", "pera", "laranja", "banana" };
string junto = string.Join(", ", itens);
Console.WriteLine(junto); // "maçã, pera, laranja, banana"
Juntando com separador vazio — colando tudo junto
Às vezes você só quer juntar as strings, sem colocar nada entre elas:
string[] partes = { "Eu", "amo", "C#" };
string mensagem = string.Join("", partes);
Console.WriteLine(mensagem); // "EuamoC#"
5. Erros comuns
Muito iniciante esquece de tirar espaços extras depois de dividir a string com Split. Por exemplo, se o usuário digitou "maçã, pera ,banana", depois do Split vão ter elementos tipo " pera ". Se você converter pra número ou comparar, vai dar bug. Usa Trim() depois do Split em cada elemento — é um bom hábito.
Outro ponto — strings vazias. Se o usuário digitou dois separadores seguidos ou começou/terminou a string com separador, o Split pode retornar elementos vazios. Usa StringSplitOptions.RemoveEmptyEntries pra não ter dor de cabeça depois.
Se o array pro Join tiver elementos vazios ou null, o Join simplesmente ignora eles. Mas se você não quiser isso (tipo, se no relatório precisa mostrar que alguns valores foram pulados), vai ter que tratar o array antes.
E mais uma: Split nunca muda a string original, ele retorna um novo array. Join também não muda o array original, só devolve uma nova string. Lembra: strings e arrays em C# são imutáveis (não mudam).
GO TO FULL VERSION