Existem dois mecanismos principais para formatar strings em C#/.NET: a utilização de String.Format() e a interpolação de strings.
String.Format() recebe uma string (designada na documentação como formato composto), composta por texto fixo e marcadores de posição (conhecidos na documentação como itens de formato), e um número variável de argumentos. O valor devolvido resolve cada item de formato com o argumento correspondente e combina os valores resolvidos com o texto fixo.
string.Format("I had {0} bitcoins on {1}, the day I forgot my password.", 55.5, new DateTime(2010, 2, 25));
// => "I had 55.5 bitcoins on 2/25/2010 00:00:00, the day I forgot my password." - US settings
Este mecanismo é tecnicamente conhecido como formatação composta.
As strings interpoladas são precedidas de um $ e incluem expressões de tempo de execução entre chavetas. O item de formato tem a seguinte sintaxe: $"{<interpolationExpression>}". Eliminam a necessidade de uma lista de argumentos separada. O resultado é funcionalmente equivalente ao mecanismo String.Format().
var loadsOf = 55.5;
var thatDay = new DateTime(2010, 2, 25);
$"I had {loadsOf} bitcoins on {thatDay}, the day I forgot my password."
// => "I had 55.5 bitcoins on 2/25/2010 00:00:00, the day I forgot my password." - US settings
O texto entre chavetas, marcadores de posição no caso do formato composto e expressões interpoladas no caso da interpolação de strings, é conhecido como item de formato.
Um item de formato pode ser composto por até 3 partes. A primeira é a expressão obrigatória ou o marcador de posição de argumento, como se vê no código de exemplo acima. Além disso, há um alinhamento opcional (introduzido por uma vírgula, ",") e uma format string opcional (introduzida por dois pontos, ":").
{<interpolationExpression>[,<alignment>][:<formatString>]}
O alinhamento especifica o comprimento do "campo" onde o texto é colocado, preenchido à esquerda com espaços se o alinhamento for positivo ou à direita se for negativo.
A format string especifica a forma do texto de saída, por exemplo se devem ser incluídos separadores de milhares num número ou se deve ser apresentada apenas a parte da data de um objeto DateTime.
O código seguinte ilustra a apresentação da parte da data de um objeto DateTime e de um número de vírgula flutuante em forma exponencial.
var loadsOf = 55.5;
var thatDay = new DateTime(2010, 2, 25);
$"I had {loadsOf:E} bitcoins on {thatDay:d}, the day I forgot my password."
// => I had 5.550000E+001 bitcoins on 02/25/2010, the day I forgot my password. - US settings
string.Format(
"I had {0:E} bitcoins on {1:d}, the day I forgot my password.",
loadsOf, thatDay)
// => I had 5.550000E+001 bitcoins on 02/25/2010, the day I forgot my password. - US settings
Existe formatação padrão e personalizada tanto para números como para datas. Não há uma diferença essencial entre a formatação personalizada e a padrão, a não ser que tens a possibilidade de compor format strings personalizadas a partir de letras de formato.
Cada thread tem uma cultura predefinida, Thread.CurrentThread.CurrentCulture, encapsulada numa instância de CultureInfo. A cultura do thread determina como as datas e os números são formatados em relação a variações regionais, como a diferença entre o formato de data convencional do Reino Unido, DD/MM/YYYY, e o dos Estados Unidos, MM/DD/YYYY.
CultureInfo implementa a interface IFormatProvider, que pode ser passada a certas sobrecargas de String.Format(). Isto pode ser usado para substituir a cultura do thread.
As strings verbatim permitem strings com várias linhas. São introduzidas com um @.
string str = @"
See no wretched
quotes everywhere
";
Neste exercício, vais ajudar namorados do secundário a declarar o seu amor nas redes sociais.
Implementa o método estático HighSchoolSweethearts.DisplaySingleLine() para receber dois nomes e mostrá-los separados por um coração.
O texto formatado deve ter 61 carateres de largura, com o coração no centro da string.
Está garantido que todos os nomes cabem bem dentro da largura da linha.
HighSchoolSweethearts.DisplaySingleLine("Lance Green", "Pat Riley");
// => " Lance Green ♡ Pat Riley "
Implementa o método estático HighSchoolSweethearts.DisplayBanner(), que mostra os dois conjuntos de iniciais separados por um sinal de mais.
HighSchoolSweethearts.DisplayBanner("L. G.", "P. R.");
// see the ascii art below
****** ******
** ** ** **
** ** ** **
** * **
** **
** L. G. + P. R. **
** **
** **
** **
** **
** **
** **
***
*
Implementa o método estático HighSchoolSweethearts.DisplayGermanExchangeStudents() para mostrar a data de início da relação e a duração para os nossos estudantes de intercâmbio alemães.
HighSchoolSweethearts.DisplayGermanExchangeStudents("Norbert", "Heidi", new DateTime(2019, 1, 22), 1535.22f);
// => "Norbert and Heidi have been dating since 22.01.2019 - that's 1.535,22 hours"
Inscreve-te no Exercism para aprenderes e dominares C# com 62 conceitos178 exercícios, e mentoria humana real, tudo grátis.