Track
/
C#
C#
/
Esercizi
/
Fidanzatini del liceo
Fidanzatini del liceo

Fidanzatini del liceo

Esercizio di apprendimento

Introduzione

Formattazione delle stringhe

In C#/.NET esistono due meccanismi principali per formattare le stringhe: l'uso di String.Format() e l'interpolazione di stringhe.

Formattazione composita

String.Format() accetta una stringa (chiamata formato composito nella documentazione) composta da testo fisso e segnaposto (chiamati elementi di formato nella documentazione), e un numero variabile di argomenti. Il valore restituito risolve ogni elemento di formato usando l'argomento corrispondente e combina i valori risolti con il testo fisso.

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

Questo meccanismo è tecnicamente noto come formattazione composita.

Interpolazione di stringhe

Le stringhe interpolate sono precedute da un $ e contengono espressioni valutate a runtime racchiuse tra parentesi graffe. L'elemento di formato ha la seguente sintassi: $"{<interpolationExpression>}". Eliminano la necessità di una lista separata di argomenti. Il risultato è funzionalmente equivalente a quello del meccanismo 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

Elementi di formato

Il testo tra parentesi graffe, segnaposto nel caso del formato composito ed espressioni interpolate nel caso dell'interpolazione di stringhe, è noto come elemento di formato.

Un elemento di formato può comprendere fino a 3 parti. La prima è l'espressione obbligatoria o il segnaposto dell'argomento, come si vede nel codice di esempio qui sopra. Inoltre, ci sono un allineamento opzionale (introdotto da una virgola, ",") e una stringa di formato opzionale (introdotta dai due punti, ":").

{<interpolationExpression>[,<alignment>][:<formatString>]}

L'allineamento specifica la lunghezza del «campo» in cui viene inserito il testo, riempito con spazi a sinistra se l'allineamento è positivo o a destra se è negativo.

La stringa di formato specifica la forma dell'output testuale, ad esempio se includere i separatori delle migliaia per un numero o se restituire solo la parte relativa alla data di un oggetto DateTime.

Il seguente codice illustra la visualizzazione della parte relativa alla data di un oggetto DateTime e di un numero in virgola mobile in forma esponenziale.

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

Esistono formattazioni sia standard che personalizzate, sia per i numeri che per le date. Non c'è alcuna differenza sostanziale tra quelle personalizzate e quelle standard, se non che hai la possibilità di comporre stringhe di formato personalizzate a partire dalle lettere di formato.

Cultura

Ogni thread ha una cultura predefinita, Thread.CurrentThread.CurrentCulture, incapsulata in un'istanza di CultureInfo. La cultura del thread determina come vengono formattate date e numeri rispetto alle varianti regionali, come la differenza nel formato di data convenzionale tra il formato britannico DD/MM/YYYY e quello statunitense MM/DD/YYYY.

CultureInfo implementa l'interfaccia IFormatProvider, che può essere passata a determinati overload di String.Format(). Questo può servire a sovrascrivere la cultura del thread.

Stringhe verbatim

Le stringhe verbatim consentono stringhe su più righe. Sono introdotte da una @.

string str = @"
See no wretched
quotes everywhere
";

Istruzioni

In questo esercizio aiuterai due fidanzatini del liceo a dichiarare il loro amore sui social media.

1. Mostra il nome della coppia separato da un cuore

Implementa il metodo statico HighSchoolSweethearts.DisplaySingleLine() in modo che prenda due nomi e li mostri separati da un cuore. Il testo formattato deve essere largo 61 caratteri, con il cuore al centro della stringa.

È garantito che tutti i nomi ci stiano comodamente nella larghezza della riga.

HighSchoolSweethearts.DisplaySingleLine("Lance Green", "Pat Riley");
// => "                  Lance Green ♡ Pat Riley                    "

2. Mostra le iniziali della coppia in un cuore di ascii art

Implementa il metodo statico HighSchoolSweethearts.DisplayBanner(), che mostra i due gruppi di iniziali separati da un segno più.

HighSchoolSweethearts.DisplayBanner("L. G.", "P. R.");
// see the ascii art below
     ******       ******
   **      **   **      **
 **         ** **         **
**            *            **
**                         **
**     L. G.  +  P. R.     **
 **                       **
   **                   **
     **               **
       **           **
         **       **
           **   **
             ***
              *

3. Gli studenti di scambio tedeschi devono sentirsi a casa grazie a dichiarazioni sensibili alle impostazioni locali.

Implementa il metodo statico HighSchoolSweethearts.DisplayGermanExchangeStudents() per mostrare la data di inizio della relazione e la durata per i nostri studenti di scambio tedeschi.

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"
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
C# Exercism

Vuoi iniziare Fidanzatini del liceo?

Iscriviti a Exercism per imparare e padroneggiare C# con 62 concetti178 esercizi e il mentoring di persone reali, tutto gratis.