Resumo : neste tutorial, você aprenderá sobre o tipo de string C# e as operações básicas de string.
Introdução à string C#
C# usa a string
palavra-chave para representar o tipo de string. A string
palavra-chave é um alias para o System.String
tipo. Portanto, os string
e String
são equivalentes.
Declarar uma string
O exemplo a seguir declara uma variável string sem inicializá-la:
string message;
Linguagem de código: C# ( cs )
Depois de declarar a variável string, você pode atribuir a ela um literal de string. Para formar uma string literal, coloque o texto da string entre aspas duplas ( "..."
). Por exemplo:
message = "Hi";
Linguagem de código: C# ( cs )
O exemplo a seguir declara e inicializa a string usando uma instrução:
string message = "Hi";
Linguagem de código: C# ( cs )
Para criar uma string de comprimento zero, você usa o String.Empty
seguinte:
string message = String.Empty;
Linguagem de código: C# ( cs )
É equivalente ao seguinte:
string message = "";
Linguagem de código: C# ( cs )
Obtenha o comprimento de uma string
Uma string possui a Length
propriedade que retorna o comprimento de uma string. Para acessar a Length
propriedade, você usa o operador ponto ( .
) assim:
string message = "Hello";
Console.WriteLine(message.Length);
Linguagem de código: C# ( cs )
Saída:
5
Linguagem de código: C# ( cs )
Concatenar duas strings
Para concatenar duas strings em uma, você usa o +
operador. Por exemplo:
string message = "Good" + " Morning";
Console.WriteLine(message);
Linguagem de código: C# ( cs )
Saída:
Good Morning!
Linguagem de código: C# ( cs )
Para anexar uma string a outra, você também pode usar o +=
operador. Por exemplo:
string message = "Good";
message += " Morning!";
Console.WriteLine(message);
Linguagem de código: C# ( cs )
Saída:
Good Morning!
Linguagem de código: C# ( cs )
A String fornece um Join()
método que permite concatenar duas ou mais strings em uma única string usando um separador.
Além do +
operador, você pode usar o método Concat() para concatenar duas ou mais strings em uma string.
A string C# é imutável
A string C# é imutável. Isso significa que quando você faz alterações em uma string, você sempre obterá uma nova string. Por exemplo:
string message = "C#";
message += " string";
Console.WriteLine(message);
Linguagem de código: C# ( cs )
Saída:
C# string
Linguagem de código: C# ( cs )
Neste exemplo:
- Primeiro, defina a
message
variável string e inicialize-a com a string literal"C#"
. - Segundo, concatene a
message
variável string com outra string literal" string!"
. - Terceiro, mostre a
message
string para o console.
Ao concatenar o message
com o " string"
, o C# não altera a string original message
, mas cria uma nova string que contém a string concatenada.
Acessando caracteres individuais
Internamente, C# armazena uma string como uma coleção de caracteres somente leitura. Para acessar um caractere individual em uma string, você usa a notação de colchetes []
com um índice:
s[index]
Linguagem de código: C# ( cs )
O primeiro caractere possui índice 0. O segundo caractere possui índice 1 e assim por diante. Por exemplo:
string message = "Hello";
Console.WriteLine(message[0]); // H
Linguagem de código: C# ( cs )
Saída:
H
Linguagem de código: C# ( cs )
Como uma string é imutável, você só pode ler caracteres individuais dela.
O exemplo a seguir resulta em um erro de compilação porque tenta alterar o primeiro caractere de uma string:
string name = "Jill";
name[0] = 'B';
Linguagem de código: C# ( cs )
Sequências de escape
Uma string literal pode conter caracteres especiais como tabulações e novas linhas,… usando uma barra invertida ( \
). Eles são chamados de sequências de escape. Por exemplo:
string header = "id\tname";
Console.WriteLine(header);
Linguagem de código: C# ( cs )
Saída:
id name
Linguagem de código: C# ( cs )
A header
string tem o \t
caractere como caractere de tabulação. Portanto, quando o exibimos no console, a saída possui um caractere de tabulação entre o id e o nome.
Se uma string literal contiver aspas duplas, você precisará usar o caractere de barra invertida \
para escapar delas. Por exemplo:
string message = "\"C# is awesome\". They said";
Console.WriteLine(message);
Linguagem de código: C# ( cs )
Saída:
"C# is awesome". They said.
Linguagem de código: C# ( cs )
Neste exemplo, a string literal contém duas aspas duplas:
"C# is awesome". They said.
Linguagem de código: C# ( cs )
Portanto, usamos o caractere de barra invertida (\) para escapar de cada um deles:
"\"C# is awesome\". They said."
Linguagem de código: C# ( cs )
Se uma string contém o caractere de barra invertida como um caractere literal, você precisará usar outro caractere de barra invertida para escapar desta forma:
string path = "C:\\users\\";
Console.WriteLine(path);
Linguagem de código: C# ( cs )
Saída:
C:\users\
Linguagem de código: C# ( cs )
Neste exemplo, a string “C:\users\” do caminho do diretório contém as barras invertidas. Portanto, precisamos escapar deles usando barras invertidas.
Sequência literal
Se uma string contiver barras invertidas, você poderá escapar delas usando barras invertidas. Mas barras invertidas duplas dificultam a leitura da string.
Para corrigir isso, você pode transformar uma string literal em uma string literal prefixando o @
símbolo. A string literal desativa caracteres de escape para que uma barra invertida seja uma barra invertida. Por exemplo:
string path = @"C:\users\";
Console.WriteLine(path);
Linguagem de código: C# ( cs )
Saída:
C:\users\
Linguagem de código: C# ( cs )
Como as strings literais preservam caracteres de nova linha como parte do texto da string, você pode usá-las para criar strings multilinhas. Por exemplo:
string content = @"I'm a multiline
string that span multiple
lines";
Console.WriteLine(content);
Linguagem de código: C# ( cs )
Saída:
I'm a multiline
string that span multiple
lines
Linguagem de código: C# ( cs )
String interpolada
Suponha que você tenha uma variável chamada name
:
string name = "Joe";
Linguagem de código: C# ( cs )
E você deseja incorporar a variável em uma string literal.
Para fazer isso, você prefixa a string literal com o $
caractere e coloca a variável entre chaves {}
:
string name = "Joe";
string greeting = $"Hello {name}!";
Console.WriteLine(greeting);
Linguagem de código: C# ( cs )
Saída:
Hello Joe!
Linguagem de código: C# ( cs )
Uma string literal com o prefixo $ é uma string interpolada.
Ao encontrar o $
prefixo, o compilador substitui a {name}
variável pelo seu valor. Esse recurso é chamado de interpolação de string.
Sequências UTF-8
A web usa UTF-8 como codificação de caracteres. Cada caractere ocupa de 1 a 4 bytes.
Mas no .NET, o tipo string usa UTF-16 por padrão. Isso significa que cada caractere ocupa pelo menos 2 bytes de tamanho.
Se você usar C# para processar caracteres para a Web, será necessário converter UTF-16 em UTF-8.
Observe que se você usar o ASP.NET Core, a estrutura fará a conversão automaticamente para você.
Para converter uma string de UTF-16 em UTF-8, use o seguinte:
var utf8 = Encoding.UTF8.GetBytes("Hello WWW");
Linguagem de código: JavaScript ( javascript )
Esta conversão manual cria uma grande sobrecarga e torna o programa mais lento.
Para resolver esse problema, o C# 11 introduziu o conceito de string UTF-8. Uma string UTF-8 tem um sufixo u8
assim:
var utf8 = "Hello WWW"u8;
Linguagem de código: JavaScript ( javascript )
A sintaxe de string utf-8 traz não apenas uma sintaxe elegante, mas também é mais eficiente do que converter uma string de UTF-16 para UTF-8.
Observe que o C# 11 também introduziu o conceito de strings brutas que abordaremos em outro tutorial.
Resumo
- C# usa a
string
palavra-chave para representar o tipo de string. - A
string
palavra-chave é um alias para oSystem.String
tipo. Portanto,string
eString
são iguais. - Strings C# são imutáveis.
- Use a
Length
propriedade para obter o comprimento da string. - Use o
+
operador para concatenar duas strings e retornar uma nova string. - Use o colchete com um índice para acessar um caractere individual em uma string.
- Use uma string literal com o
@
prefixo para desabilitar o caractere de escape para que as barras invertidas não tenham nenhum significado especial. - Use uma string interpolada com o
$
prefixo para incorporar uma variável em uma string literal. - Use o
u8
sufixo para criar uma string literal com codificação UTF-8.