Existem dois mecanismos principais para formatar strings em C#/.NET. O uso de String.Format() e a interpolação de strings.
String.Format() recebe uma string (chamada na documentação de formato composto) composta por texto fixo e espaços reservados (conhecidos na documentação como itens de formato), além de um número variável de argumentos. O valor de retorno resolve cada item de formato usando 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
Esse mecanismo é tecnicamente conhecido como formatação composta.
Strings interpoladas são prefixadas com um $ e incluem expressões de tempo de execução entre chaves. O item de formato tem a seguinte sintaxe: $"{<interpolationExpression>}". Elas dispensam a necessidade de uma lista separada de argumentos. 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 chaves, espaços reservados 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 espaço reservado de argumento, como visto no código de exemplo acima. Além disso, há um alinhamento opcional (introduzido por uma vírgula, ",") e uma string de formato opcional (introduzida por dois-pontos, ":").
{<interpolationExpression>[,<alignment>][:<formatString>]}
O alinhamento especifica o comprimento do "campo" no qual o texto é colocado, preenchido à esquerda com espaços se o alinhamento for positivo ou à direita se for negativo.
A string de formato especifica a forma da saída de texto, como se separadores de milhar devem ser incluídos em um número ou se apenas a parte de data de um objeto DateTime deve ser gerada.
O código a seguir ilustra a exibição da parte de data de um objeto DateTime e de um número de ponto 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
Há formatação padrão e personalizada tanto para números quanto para datas. Não há diferença vital entre personalizada e padrão, exceto que você tem a chance de compor strings de formato personalizadas a partir de letras de formato.
Cada thread tem uma cultura padrão Thread.CurrentThread.CurrentCulture encapsulada em uma instância de CultureInfo. A cultura da thread determina como datas e números são formatados em relação a variações regionais, como a diferença no formato de data convencional entre o Reino Unido DD/MM/YYYY e os EUA MM/DD/YYYY.
CultureInfo implementa a interface IFormatProvider, que pode ser passada para certas sobrecargas de String.Format(). Isso pode ser usado para substituir a cultura da thread.
Strings verbatim permitem strings com várias linhas. Elas são introduzidas com um @.
string str = @"
See no wretched
quotes everywhere
";
Neste exercício, você vai ajudar um casal de namorados do colégio a declarar seu amor nas redes sociais.
Implemente o método estático HighSchoolSweethearts.DisplaySingleLine() para receber dois nomes e exibi-los separados por um coração.
O texto formatado deve ter 61 caracteres de largura, com o coração no centro da string.
É garantido que todos os nomes vão caber tranquilamente na largura da linha.
HighSchoolSweethearts.DisplaySingleLine("Lance Green", "Pat Riley");
// => " Lance Green ♡ Pat Riley "
Implemente o método estático HighSchoolSweethearts.DisplayBanner(), que exibe 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. **
** **
** **
** **
** **
** **
** **
***
*
Implemente o método estático HighSchoolSweethearts.DisplayGermanExchangeStudents() para mostrar a data de início do relacionamento e o tempo de duração para 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"
Crie sua conta no Exercism para aprender e dominar C# com 62 conceitos178 exercícios e mentoria humana de verdade, tudo de graça.