Két fő mechanizmus létezik a stringek formázására a C#/.NET-ben: a String.Format() használata és a string-interpoláció.
A String.Format() egy stringet (a dokumentációban összetett formátum) fogad, amely rögzített szövegből és helyőrzőkből (a dokumentációban formátumelemek), valamint változó számú argumentumból áll. A visszatérési érték a megfelelő argumentum felhasználásával feloldja az egyes formátumelemeket, majd a feloldott értékeket összefűzi a rögzített szöveggel.
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
Ezt a mechanizmust szaknyelven összetett formázásnak nevezik.
Az interpolált stringeket egy $ előtag jelöli, és kapcsos zárójelbe zárt futásidejű kifejezéseket tartalmaznak. A formátumelem szintaxisa a következő: $"{<interpolationExpression>}". Ezek feleslegessé teszik a külön argumentumlista szükségességét. Az eredmény funkcionálisan egyenértékű a String.Format() mechanizmussal.
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
A kapcsos zárójelben lévő szöveget formátumelemnek nevezzük: az összetett formátumnál ez helyőrző, a string-interpolációnál pedig interpolált kifejezés.
Egy formátumelem legfeljebb 3 részből állhat. Az első a kötelező kifejezés vagy argumentum-helyőrző, ahogyan a fenti példakódban is látható. Emellett létezik egy opcionális igazítás (amit egy vessző, „,” vezet be) és egy opcionális formátumstring (amit egy kettőspont, „:” vezet be).
{<interpolationExpression>[,<alignment>][:<formatString>]}
Az igazítás megadja annak a „mezőnek” a hosszát, amelybe a szöveg kerül: ha az igazítás pozitív, a szöveg bal oldalán, ha negatív, a jobb oldalán egészül ki szóközökkel.
A formátumstring a szöveges kimenet alakját határozza meg: például azt, hogy egy számnál legyenek-e ezres elválasztók, vagy hogy egy DateTime objektumnak csak a dátumrésze jelenjen-e meg.
A következő kód egy DateTime objektum dátumrészének és egy lebegőpontos számnak az exponenciális alakban való megjelenítését mutatja be.
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
A számok és a dátumok esetében is létezik szabványos és egyéni formázás. Nincs lényeges különbség az egyéni és a szabványos között, csak annyi, hogy az egyéni formátumstringeket formátumbetűkből állíthatod össze.
Minden szálnak van egy alapértelmezett kultúrája, a Thread.CurrentThread.CurrentCulture, amelyet egy CultureInfo példány foglal magába. A szál kultúrája határozza meg, hogyan formázódnak a dátumok és a számok a regionális eltérések figyelembevételével, például az Egyesült Királyság DD/MM/YYYY és az Egyesült Államok MM/DD/YYYY szokásos dátumformátuma közötti különbség esetén.
A CultureInfo megvalósítja az IFormatProvider interfészt, amely átadható a String.Format() bizonyos túlterheléseinek. Ezzel felülírható a szál kultúrája.
A szó szerinti stringek lehetővé teszik a többsoros stringeket. Egy @ jel vezeti be őket.
string str = @"
See no wretched
quotes everywhere
";
Ebben a feladatban segítesz a középiskolás szerelmeseknek, hogy nyilvánosan vállalják a szerelmüket a közösségi médiában.
Készítsd el a statikus HighSchoolSweethearts.DisplaySingleLine() metódust, amely két nevet vesz át, és azokat egy szívvel elválasztva jeleníti meg.
A formázott szöveg 61 karakter széles legyen, a szív pedig a string közepén legyen.
Minden név biztosan bőven belefér a sor szélességébe.
HighSchoolSweethearts.DisplaySingleLine("Lance Green", "Pat Riley");
// => " Lance Green ♡ Pat Riley "
Készítsd el a statikus HighSchoolSweethearts.DisplayBanner() metódust, amely a két kezdőbetű-készletet egy plusz jellel elválasztva jeleníti meg.
HighSchoolSweethearts.DisplayBanner("L. G.", "P. R.");
// see the ascii art below
****** ******
** ** ** **
** ** ** **
** * **
** **
** L. G. + P. R. **
** **
** **
** **
** **
** **
** **
***
*
Készítsd el a statikus HighSchoolSweethearts.DisplayGermanExchangeStudents() metódust, amely megmutatja a német cserediákjaink kapcsolatának kezdetét és annak időtartamát.
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"
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) C# nyelvet 62 fogalom178 feladat segítségével, valódi emberi mentorálással, mindez ingyen.