A linguagem C# faz o tratamento de strings levando em consideração Escape Codes, que são códigos precedidos pelo caracter “\”. Desta forma temos que:
string temp = "C:\\Windows"; // Conteúdo de temp: C:\Windows string temp = "Fernão \"Capelo\" Gaivota\u0066"; // Conteúdo de temp: Fernão "Capelo" Gaivota! string temp = "Rio de Janeiro\nBrasil"; // Conteúdo de temp: Rio de Janeiro Brasil
Desta forma, se quisermos inserir um texto com múltiplas linhas em uma variável, temos que recorrer a um recurso como:
string temp = "SELECT Nome, Endereco, Telefone " + "FROM Cadastro " + "WHERE Id = 10 "; // Conteúdo de temp: SELECT Nome, Endereco, Telefone FROM Cadastro WHERE Id = 10
Observe que, apesar de escrita em três linhas, foi gerada uma string concatenada com uma única linha. Para que a variável final armazene o texto em múltiplas linhas teria que se colocar “\n” nos pontos onde se deseja fazer as quebras de linha.
Então agora vamos aprender como manipular strings no C# de forma mais eficiente:
Comentários
// Comentário com uma única linha /* Comentário com múltimplas linhas */ int a = 10; int b = 20; string rem = a.toString() + /*comentário no meio do código */ " " + b.toString(); /// Documentação XML
Eu falo um pouco mais sobre documentação XML neste artigo.
Interpolação
// Preparando ambiente string Nome = "Kelly"; string Idade = 40; DateTime Agora = DateTime.Now; // Sem interpolação: string temp = "Nome: " + Nome + "Idade: "+ Idade.toString() + "anos. " + "Enviado às " + Agora.Hour.toString + ":" + Agora.Minute.toString() + " horas."; // Com interpolação: string temp = $"Nome: {Nome}, Idade: {Idade} anos. Enviado às {Agora:HH:mm} Horas."; // Conteúdo de temp em ambos os casos: Nome: Kelly, Idade: 40, Enviado às 12:35 Horas.
Para caracterizar que vai utilizar interpolação a string deve iniciar com “$”. Não pode haver espaço entre $ e as aspas. As variáveis ficam entre chaves, conforme exemplo da linha 12 acima:
string temp = $"Nome: {Nome}, Idade: {Idade} anos. Enviado às {Agora:HH:mm} Horas.";
Sintaxe:
{<ExpressãoDeInterpolação>[,<Alinhamento>][:<Formato>]}
ExpressãoDeInterpolação: Expressão que produz o resultado a ser formatado. Quando nulo retorna string vazia.
Alinhamento: Inteiro que representa a quantidade mínima de caracteres deve ter o resultado. Quando positivo, alinha pela direita, quando negativo alinha pela esquerda.
Formato: Formatação que será aplicada. Para detalhes, veja este artigo em Microsoft Learn.
Operações utilizando strings interpoladas:
string strLeft = "Esquerda"; string strRight = "Direita"; string temp = $"|{strLeft,-10}|{strRight,10}|"; // Conteúdo de temp: // |Esquerda | Direita| string temp = $"{Math.Pi:F3}"; // Conteúdo de temp: // 3.142 int Nota = 50; string Nome = "Isaac"; string temp = $"A nota de {Nome} está classificada como { Nota switch { > 90 => "Excelente", > 70 => "Boa", > 50 => "Média", _ => "Ruim", } }."; // Conteúdo de temp: // A nota de Isaac está classificada como Média. string temp = $"{Nome} foi { (Nota >= 50 ? "Aprovado" : "Reprovado") }."; // Conteúdo de temp: // Isaac foi Aprovado. int Idade = 30; string temp = $"{Nome} tem {Idade} ano{(Idade == 1 ? "" : "s")} de idade."; // Conteúdo de temp: // Isaac tem 30 anos de idade. double VelocidadeDaLuz = 299792.458; System.Globalization.CultureInfo.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("pt-BR"); string temp = $"A velocidade da luz é {VelocidadeDaLuz:N3} km/s."; // Conteúdo de temp: // A velocidade da luz é 299.792,458 km/s. var CulturaEspecifica = System.Globalization.CultureInfo.GetCultureInfo("en-IN"); string temp = string.Create(CulturaEspecifica, $"A velocidade da luz é {VelocidadeDaLuz:N3} km/s."); // Conteúdo de temp: // A velocidade da luz é 2,99,792.458 km/s. string temp = string.Create(System.Globalization.CultureInfo.InvariantCulture, $"A velocidade da luz é {VelocidadeDaLuz:N3} km/s."); // Conteúdo de temp: // A velocidade da luz é 299,792.458 km/s.
Se precisar escrever tokens {x} dentro de uma string interpolada, basta aumentar o número de $ no início da string. A quantidade de $ será o indicativo de quantas chaves são necessárias para caracterizar um token de de interpolação.
string nome = "Albert"; string temp = $"O seu nome é {nome}."; // temp: O seu nome é Albert. string temp = $$"O seu nome é {nome}."; // temp: O seu nome é {nome}. string temp = $$"O seu nome é {{nome}}."; // temp: O seu nome é Albert.
Uma constante pode conter elementos interpolados, desde que esses elementos também sejam constantes:
constant Inventor = "Santos Dumont"; constant eterno = "Quem inventou o avião foi {Nome} e isso não se discute!";
String Literals
Para escrever strings no C# sem levar em consideração os escape codes é necessário recorrer às string literals. Dessa forma é possível até mesmo escrever strings com múltiplas linhas de forma bem mais visualmente amigável. Existem dois tipos: Verbatim String Literals e Raw String Literals, sendo que a segunda possui mais recursos.
Verbatim String Literals
Uma Verbatim String Literal é caracterizada pelo @ no início da formação. Pode ser em qualquer ordem @” ou “@.
Exemplo mostrando a mesma string escrito da forma padrão e da forma Verbatim:
string temp1 = "C:\\Temp\\Aula1";
string temp2 = @"C:\Temp\Aula1";
// O conteúdo das duas strings é:
C:\Temp\Aula1
O único código especial dentro de uma Verbatim string é “, que deve ser representado como “”.
string temp = @"O nome do livro é ""João e Maria"".";
É possível também utilizar comandos do C# com o identificador Verbatim. No exemplo abaixo, vou criar um objeto com o nome for e outro com o nome if:
string[] @for = {"VW","Audi","Porsche"};
string @if = "Mercedes-Benz";
E ainda podemos utilizar um recurso interessante de interpolação utilizando o código acima, dessa forma:
string[] @for = {"VW","Audi","Porsche"}; for (int i = 0; i < @for.length; i++) { Console.WriteLine($"Trabalhamos com {@for[i]}."); } // Resultado: // Trabalhamos com VW. // Trabalhamos com Audi. // Trabalhamos com Porsche.
Usando Verbatim Literals para escrever uma string multi-linhas:
string cmdSQL = @"SELECT Nome, Endereco, Telefone FROM Cadastro WHERE Id = 10"; int id = 10; strint cmdSQL = $@"SELECT Nome, Endereco, Telefone FROM Cadastro WHERE Id = {id}";
Raw String Literals
É outra forma de escrever strings de forma literal, sem os escape codes, porém de uma forma ainda mais amigável que Verbatim String Literals. Uma Raw String Literal deve estar contida entre, no mínimo 3 aspas. Dessa forma:
string temp = """Isso é uma raw string que pode conter \ e "".";
// Resultado de temp:
Isso é uma raw string que pode conter \ e ".
Se precisar escrever aspas duplas ou triplas, basta aumentar o número de aspas que delimita a raw string, por exemplo:
string temp = """"Essa raw string tem "" em seu conteúdo."""";
// Resultado de temp:
Essa raw string tem "" em seu conteúdo.
Raw strings também podem ser combinadas com interpolação:
string Nome = "Nikola Tesla"; string temp = $"""O {Nome} foi um grande "gênio"."""; // Resultado de temp: // O Nikola Tesla foi um grande "gênio".
Mas as raw strings se destacam mesmo na hora de escrever strings com múltiplas linhas porque, ao contrário das verbatim strings, que fazem uma bagunça com a identação, as raw strings fazem um belo controle deste recurso, por exemplo:
int id = 10; string sqlCmd = $""" SELECT Nome, Endereco, Telefone FROM Cadastro INNER JOIN Profissoes ON Profissao = Profissoes WHERE Id = {id} """;
Vai gerar o seguinte resultado em sqlCmd:
SELECT Nome, Endereco, Telefone FROM Cadastro INNER JOIN Profissoes ON Profissao = Profissoes WHERE Id = 10
Observe que:
- A primeira e a última quebra de linha foram suprimidas, mantendo apenas o conteúdo contido entre os delimitadores da raw string.
- Os espaços de identação também foram suprimidos, mantendo a identação apenas no código, para melhor organização porém eliminando-a no resultado final.
- A string começa e termina com quebras de linha.
- Espaços em branco após as aspas de abertura, na primeira linha são ignorados.
- Linhas vazias no conteúdo da raw strings são respeitadas.
- Se as aspas de fechamento não estiverem seguindo o padrão de identação, a string será interpretada como uma verbatim string.
Se achou este conteúdo relevante, considere assinar este blog preenchendo seu e-mail abaixo, ou deixando um comentários lá no final.