En C#/.NET hay dos mecanismos principales para dar formato a los strings: el uso de String.Format() y la interpolación de strings.
String.Format() recibe un string (al que la documentación llama formato compuesto) formado por texto fijo y marcadores de posición (que la documentación llama elementos de formato), y un número variable de argumentos. El valor devuelto resuelve cada elemento de formato usando el argumento correspondiente y combina los valores resueltos con el texto fijo.
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
Técnicamente, este mecanismo se conoce como formato compuesto.
Los strings interpolados van precedidos de un $ e incluyen expresiones que se evalúan en tiempo de ejecución entre llaves. El elemento de formato tiene la siguiente sintaxis: $"{<interpolationExpression>}". Eliminan la necesidad de una lista de argumentos aparte. El resultado es funcionalmente equivalente al mecanismo de 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
El texto entre llaves, que en el formato compuesto son marcadores de posición y, en la interpolación de strings, expresiones interpoladas, se conoce como elemento de formato.
Un elemento de formato puede constar de hasta 3 partes. La primera es la expresión o el marcador de posición del argumento, obligatoria, como se ve en el código de ejemplo anterior. Además, hay una alineación opcional (que se introduce con una coma, «,») y un string de formato opcional (que se introduce con dos puntos, «:»).
{<interpolationExpression>[,<alignment>][:<formatString>]}
La alineación especifica la longitud del «campo» en el que se coloca el texto, rellenado con espacios a la izquierda si la alineación es positiva o a la derecha si es negativa.
El string de formato especifica la forma del texto de salida, como si deben incluirse separadores de miles en un número o si solo debe mostrarse la parte de la fecha de un objeto DateTime.
El siguiente código ilustra cómo mostrar la parte de la fecha de un objeto DateTime y un número de coma flotante en notación 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
Existen formatos tanto estándar como personalizados, para números y para fechas. No hay una diferencia esencial entre los formatos personalizados y los estándar, salvo que tienes la oportunidad de componer strings de formato personalizados a partir de letras de formato.
Cada hilo tiene una cultura predeterminada, Thread.CurrentThread.CurrentCulture, encapsulada en una instancia de CultureInfo. La cultura del hilo determina cómo se formatean las fechas y los números en función de variaciones regionales, como la diferencia en el formato de fecha convencional entre el DD/MM/YYYY del Reino Unido y el MM/DD/YYYY de Estados Unidos.
CultureInfo implementa la interfaz IFormatProvider, que puede pasarse a determinadas sobrecargas de String.Format(). Esto puede usarse para anular la cultura del hilo.
Los strings textuales permiten strings de varias líneas. Se introducen con una @.
string str = @"
See no wretched
quotes everywhere
";
En este ejercicio vas a ayudar a una pareja de enamorados del instituto a declarar su amor en las redes sociales.
Implementa el método estático HighSchoolSweethearts.DisplaySingleLine() para recibir dos nombres y mostrarlos separados por un corazón.
El texto formateado debe tener 61 caracteres de ancho, con el corazón en el centro del string.
Todos los nombres caben de sobra dentro del ancho de la línea.
HighSchoolSweethearts.DisplaySingleLine("Lance Green", "Pat Riley");
// => " Lance Green ♡ Pat Riley "
Implementa el método estático HighSchoolSweethearts.DisplayBanner(), que muestra los dos conjuntos de iniciales separados por un signo más.
HighSchoolSweethearts.DisplayBanner("L. G.", "P. R.");
// see the ascii art below
****** ******
** ** ** **
** ** ** **
** * **
** **
** L. G. + P. R. **
** **
** **
** **
** **
** **
** **
***
*
Implementa el método estático HighSchoolSweethearts.DisplayGermanExchangeStudents() para mostrar la fecha de inicio de la relación y la duración de esta para nuestros estudiantes de intercambio alemanes.
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"
Regístrate en Exercism para aprender y dominar C# con 62 conceptos178 ejercicios y mentoría humana real, todo gratis.