This article has been localized into Portuguese by the community.
Strings
Uma string é um pedaço de texto. Geralmente é composto por 2 caracteres ou mais, já que se for apenas um, você deve considerar usar um char . No entanto, as strings podem estar vazias ou nulas, já que é um tipo de referência. Uma string pode ser declarada como os outros tipos de dados com os quais já trabalhamos:
string s;
Ou se você quiser atribuir um valor a ele imediatamente:
string name = "John Doe";
Qualquer coisa dentro de um conjunto de aspas duplas em C # é considerada uma string, como no exemplo acima - cercando um ou vários caracteres entre aspas é simplesmente como você diz ao compilador que o material entre ele deve ser interpretado como uma string em vez de palavras-chave e comandos.
Cordas são imutáveis
Em C #, as strings são imutáveis, o que basicamente significa que, uma vez criadas, elas não podem ser alteradas. Obviamente, isso não é muito prático no uso diário, então o framework nos ajuda - em vez de ter que continuar declarando novas strings para fazer mudanças, ele simplesmente cria uma nova string para você toda vez que você altera a existente. Isso faz dele um processo contínuo, mas também pode tornar seu código menos eficiente sem que você perceba. Aqui está um exemplo para ilustrar isso:
string numbers = "";
for (int i = 0; i < 10000; i++)
numbers += i.ToString();
Nesse caso, fazemos um loop de 10.000 vezes, sempre anexando o índice atual à string. Com o conhecimento que você acabou de ganhar, agora você sabe que, em vez de alterar a sequência existente para incluir o número mais recente, uma nova sequência é criada e, em seguida, atribuída à variável antiga, deixando o valor antigo a ser limpo pela estrutura. E isso acontece 10.000 vezes! Em vez disso, geralmente é recomendado usar o chamado StringBuilder se você souber que estará construindo uma string sobre várias operações:
StringBuilder numbers = new StringBuilder();
for (int i = 0; i < 10000; i++)
numbers.Append(i);
Console.WriteLine(numbers.ToString());
Operações básicas de string
Com tudo isso sobre as cordas sendo imutáveis disse, você ainda vai encontrar sua auto manipulação e trabalhar com cordas simples muito, e não se preocupe com isso - a menos que você esteja trabalhando dentro de um loop gigante, provavelmente não há problema! Aqui estão algumas das coisas básicas que você pode fazer com strings:
Você pode concatenar duas ou mais strings simplesmente adicionando-as (usando o operador plus):
string name = "John" + " " + "Doe";
É claro que você pode fazer o mesmo com variáveis, nas quais você mistura strings com aspas duplas e variáveis que são strings ou que podem ser transformadas em strings (usando o método ToString() encontrado em todos os objetos). No entanto, uma maneira mais "limpa" de fazer isso é com o método Format encontrado na classe String:
string name = "John Doe";
int age = 42;
string userString = String.Format("{0} is {1} years old and lives in {2}", name, age, "New York");
Observe como eu uso placeholders numerados ({0}, {1} etc.) e, em seguida, forneço os valores para ele como parâmetros para o método. Apenas lembre-se de que os índices e a quantidade de espaços reservados devem corresponder aos parâmetros que você passa!
A propriedade Comprimento permite que você verifique o comprimento atual de uma string, por exemplo para fins de validação. A propriedade Length também é muito útil em combinação com outras propriedades e métodos, e. os métodos Substring() e IndexOf() . O método Substring permite que você recupere uma parte da string, enquanto o método IndexOf permite que você encontre o primeiro índice de um determinado char/string. Permita-me ilustrar com um exemplo:
string name = "John Doe";
int indexOfSpace = name.IndexOf(' ') + 1;
string lastName = name.Substring(indexOfSpace, name.Length - indexOfSpace);
Console.WriteLine(lastName);
Explicação rápida: Nós definimos um nome, então usamos o método IndexOf() para encontrar a primeira posição de um caractere de espaço. Em seguida, usamos o método Substring() para obter tudo após o caractere de espaço, fornecendo uma posição inicial e um comprimento.
Outro método auxiliar legal na classe String é o método Replace(). Ele permite que você pegue uma string e então execute uma operação de busca/substituição, assim:
string name = "John Doe";
Console.WriteLine(name.Replace("John", "Jane"));
O método Replace() não é estrito em tudo - se a string que você está procurando (o primeiro parâmetro) não estiver presente, nada acontecerá (nenhuma exceção será lançada ou algo assim). Se estiver presente, será substituído pelo segundo parâmetro. No entanto, se você quiser verificar antes de substituir, use o método Contains() :
string name = "John Doe";
if (name.Contains("John"))
Console.WriteLine(name.Replace("John", "Jane"));
else
Console.WriteLine("John was not found!");
Às vezes, você quer saber se uma string começa ou termina com um caractere ou string específico. Para isso, a classe String pode ajudá-lo com os métodos StartsWith() e EndsWith() , que funcionam exatamente como o nome indica:
string name = "John Doe";
if ((name.StartsWith("John")) && (name.EndsWith("Doe")))
Console.WriteLine("Hello, Mr. Doe!");
Existem ainda mais métodos Cool String, e há definitivamente mais formas de usá-los do que os ilustrados por esses breves exemplos. Se você quiser saber mais sobre isso, dê uma olhada no MSDN documentação para a classe String .
Cordas Verbatim & amp; Escapando
Ao definir uma string, você verá em breve que certos caracteres têm finalidades especiais. O exemplo mais importante disso é o double quote it self, porque desde que ele é usado para marcar o início e o final de uma string para o compilador, como você pode usá-lo dentro de sua string? A resposta mais simples para isso é escapar, onde você sinaliza para o compilador que um caractere especial deve ser tratado literalmente em vez de sua função usual. Aqui está um exemplo:
Console.WriteLine("What do you mean by \"Hello, world\" ??");
Quando executado, o resultado ficará assim:
What do you mean by "Hello, world" ??
Em outras palavras, nós simplesmente usamos barras invertidas antes de aspas duplas, para indicar que isso NÃO é o fim da string, mas, na verdade, queremos uma aspa dupla. Então ... e se realmente quisermos uma barra invertida e não apenas usá-la para escapar de outro personagem? Bem, então você terá que escapar disso também - com outra barra invertida:
Console.WriteLine("Right here \\ Right now");
Resultando em:
Right here \ Right now
A razão é que a barra invertida não é usada apenas para escapar de aspas duplas - ela também é usada para prefixar um intervalo de caracteres para dar a eles significados especiais. Por exemplo, \ n é uma nova linha, \ t é um caractere de tabulação e assim por diante. Você pode encontrar uma boa lista de sequências de escape aqui .
Cordas verbatim
Como alternativa a todo esse escape, você pode usar uma string textual. É como uma declaração de cadeia regular, mas prefixada com o caractere @ e, dentro dela, todos os caracteres são tratados literalmente:
Console.WriteLine(@"In a verbatim string \ everything is literal: \n & \t");
A saída será parecida com a entrada:
In a verbatim string \ everything is literal: \n & \t
Há apenas uma exceção a essa regra: Uma aspa dupla ainda precisa ser escapada, mas isso faz muito sentido, porque, do contrário, como o compilador saberia se você estivesse tentando terminar a sequência ou não? Em uma string textual, no entanto, as aspas duplas não são escapadas com uma barra invertida, mas sim com outras aspas duplas, assim:
Console.WriteLine(@"What do you mean by ""Hello, world"" ??");
O resultado é assim:
What do you mean by "Hello, world" ??
Resumo
Strings são TÃO um tópico importante para todos os programadores - você provavelmente estará fazendo algum tipo de processamento de strings durante a maior parte do tempo que você gasta escrevendo código. Felizmente, o C # tem todas as ferramentas necessárias para fazer isso, como tentei ilustrar neste artigo.