Gyakorlat – Sztringek egyesítése karakteres feloldósorozatokkal

Befejeződött

Tegyük fel, hogy felkérték egy parancssori eszköz makettjének létrehozására, amely angol és japán nyelven is létrehoz számlákat. A számlák létrehozására használható funkciókat most nem kell létrehoznia. Csak a számlázási részleg belső ügyfeleinek kell megadnia a parancssori felületet a jóváhagyásukhoz. A felettese arra kérte, hogy adjon meg egy formázást, amelyen az eszköz aktuális állapota látható. A felettes azt is kérte, hogy adjon tájékoztatást a japán felhasználók számára arról, hogy hogyan lehet a számlákat japán nyelven létrehozni.

Gyakorlat – Literális sztringek formázása C-ben#

Ebben a gyakorlatban különböző technikákat ismerhet meg a speciális karakterek megjelenítéséhez és különböző formázási módok hozzáadásához a kimenethez.

Karakteres feloldósorozatok

A feloldó karaktersorozat a futtatókörnyezet utasítása egy speciális karakter beszúrására, amely hatással lesz a sztring kimenetére. A C#-ban a feloldó karaktersorozat egy fordított perjellel \ kezdődik, amelyet a menekülő karakter követ. A \n sorozat például egy új sort szúr be, a \t sorozat pedig egy tabulátort.

Az alábbi kód feloldó karaktersorozatokat használ az új vonalak és lapok hozzáadásához:

Console.WriteLine("Hello\nWorld!");
Console.WriteLine("Hello\tWorld!");

A kód futtatásakor a következő kimenet jelenik meg:

Hello
World!
Hello   World!

Mi a teendő, ha dupla idézőjelet szeretne beszúrni egy literális sztringbe? Ha nem használja a karakteres feloldósorozatot, összezavarja a fordítót, mert azt fogja hinni, hogy idő előtt le szeretné állítani a sztringet. A fordító nem fogja megérteni a második dupla idézőjel utáni karakterek rendeltetését.

Console.WriteLine("Hello "World"!");

A .NET-szerkesztő piros hullámos vonallal húzza majd alá a World szót. Ha mégis megpróbálja futtatni a kódot, a következő kimenet jelenik meg:

(1,27): error CS1003: Syntax error, ',' expected
(1,27): error CS0103: The name 'World' does not exist in the current context
(1,32): error CS1003: Syntax error, ',' expected

A helyzet kezeléséhez használja a menekülési \" sorozatot:

Console.WriteLine("Hello \"World\"!");

Ha a fenti kódot futtatja, a következő kimenet jelenik meg:

Hello "World"!

Mi a teendő, ha a fordított perjelet más célra kell használni, például egy fájl elérési útjának megjelenítéséhez?

Console.WriteLine("c:\source\repos");

Sajnos a C# lefoglalja a fordított perjelet a feloldósorozatokhoz, ezért a kód futtatásakor a fordító a következő hibát jeleníti meg:

(1,22): error CS1009: Unrecognized escape sequence

A problémát a \s sorozat okozza. Ez \r nem okoz hibát, mert ez egy érvényes menekülési sorozat egy kocsivissza. Ebben a kontextusban azonban nem szeretne kocsivisszatűnni.

A probléma megoldásához egyetlen \\ fordított perjelet jeleníthet meg.

Console.WriteLine("c:\\source\\repos");

A fordított perjel karakter kikerülésével a kívánt kimenet jön létre:

c:\source\repos

Kimenet formázása karakteres feloldósorozatokkal

  1. Jelölje ki az összes kódot a .NET-szerkesztőben, majd a Törlés vagy a Backspace billentyű lenyomásával törölje azt.

  2. A parancssori eszköz makettjének létrehozásához írja be a következő kódot a szerkesztőbe:

    Console.WriteLine("Generating invoices for customer \"Contoso Corp\" ... \n");
    Console.WriteLine("Invoice: 1021\t\tComplete!");
    Console.WriteLine("Invoice: 1022\t\tComplete!");
    Console.WriteLine("\nOutput Directory:\t");
    
  3. Most futtassa a kódot. A kimeneti konzolon a következő eredmény jelenik meg:

    Generating invoices for customer "Contoso Corp" ...
    
    Invoice: 1021           Complete!
    Invoice: 1022           Complete!
    
    Output Directory:    
    

Szó szerinti sztringkonstans

A verbatim literális sztring anélkül őrzi meg az összes térköz- és egyéb karaktert, hogy fordított perjellel kellene azokat feloldanunk. Verbatim sztring létrehozásához a @ direktívát kell használni a literális sztring előtt.

Console.WriteLine(@"    c:\source\repos    
        (this is where your code goes)");

Figyelje meg, hogy a sztring két sorra terjed ki, és a C#-utasítás által generált térközök a következő kimenetben lesznek.

    c:\source\repos    
        (this is where your code goes)

Kimenet formázása szó szerinti sztringkonstansokkal

  1. Adja hozzá a következő kódsort a korábban létrehozott kód alá:

    Console.Write(@"c:\invoices");
    
  2. Most futtassa a kódot. A következő eredmény jelenik meg, amely tartalmazza a "Kimeneti könyvtárat":

    Generating invoices for customer "Contoso Corp" ...
    
    Invoice: 1021           Complete!
    Invoice: 1022           Complete!
    
    Output Directory:
    c:\invoices
    

Unicode-feloldó karakterek

Literális sztringekben kódolt karaktereket a \u feloldókarakter-sorozattal is hozzáadhat, amit egy négy karakterből álló kód követ, amely az Unicode valamely karakterét jelöli (UTF-16).

// Kon'nichiwa World
Console.WriteLine("\u3053\u3093\u306B\u3061\u306F World!");

Megjegyzés:

Itt több dologra is ügyelnünk kell. Először is, néhány konzol, például a Windows-parancssor nem jeleníti meg az összes Unicode-karaktert. Ehelyett kérdőjelre cseréli ezeket a karaktereket. Emellett az itt használt példák UTF-16-os kódolásúak. Néhány karakternél UTF-32 szükséges, ezért más feloldókarakter-sorozatot kell használni. Ez egy szerteágazó téma, és ebben a modulban csak azt szeretnénk megmutatni, hogy mit lehet elvégezni. Attól függően, hogy mire van szüksége, akár nagyon hosszú időt is eltölthet azzal, hogy megtanulja hogyan lehet használni az Unicode-karaktereket az alkalmazásokban.

Kimenet formázása Unicode-feloldó karakterek használatával

A parancssori eszköz makettjének befejezéséhez hozzáad egy japán nyelvű kifejezést, amely a következőt fordítja le: "Japán számlák létrehozása". Ezután megjelenít egy szó szerinti literális sztringet, amely a felhasználó által megadható parancsot jelöli. Néhány feloldósorozatot is hozzáad a formázáshoz.

  1. Adja hozzá a következő kódot az alkalmazáshoz:

    // To generate Japanese invoices:
    // Nihon no seikyū-sho o seisei suru ni wa:
    Console.Write("\n\n\u65e5\u672c\u306e\u8acb\u6c42\u66f8\u3092\u751f\u6210\u3059\u308b\u306b\u306f\uff1a\n\t");
    // User command to run an application
    Console.WriteLine(@"c:\invoices\app.exe -j");
    
  2. A kód helyességének biztosításához hasonlítsa össze a következőkkel:

    Console.WriteLine("Generating invoices for customer \"Contoso Corp\" ...\n");
    Console.WriteLine("Invoice: 1021\t\tComplete!");
    Console.WriteLine("Invoice: 1022\t\tComplete!");
    Console.WriteLine("\nOutput Directory:\t");
    Console.Write(@"c:\invoices");
    
    // To generate Japanese invoices:
    // Nihon no seikyū-sho o seisei suru ni wa:
    Console.Write("\n\n\u65e5\u672c\u306e\u8acb\u6c42\u66f8\u3092\u751f\u6210\u3059\u308b\u306b\u306f\uff1a\n\t");
    // User command to run an application
    Console.WriteLine(@"c:\invoices\app.exe -j");
    
  3. Most futtassa a kódot. A kimeneti konzolon a következő eredmény jelenik meg:

    Generating invoices for customer "Contoso Corp" ...
    
    Invoice: 1021            Complete!
    Invoice: 1022            Complete!
    
    Output Directory:
    c:\invoices
    
    日本の請求書を生成するには:
        c:\invoices\app.exe -j
    

Összefoglalás

A literális sztringek formázásáról eddig az alábbiakat tanulta:

  • A feloldókarakter-sorozatokat akkor kell használni, amikor speciális karaktert szeretnénk beszúrni egy literális sztringbe, például egy tabulátort (\t), egy új sort (\n) vagy egy dupla idézőjelet (\").
  • Ha a fordított perjelet bármilyen más helyzetben szeretné használni, akkor használja a fordított perjel feloldókarakterét: \\.
  • @ Az irányelv használatával hozzon létre egy szó szerinti sztringkonstanst, amely megtartja a szóközök formázását és a fordított perjelek karaktereit egy sztringben.
  • Ha egy sztringben Unicode-karaktereket (UTF-16) szeretne használni, használja a \u sorozat utáni négy karakterből álló kódot.
  • Előfordulhat, hogy a Unicode-karakterek az alkalmazástól függően nem nyomtathatók megfelelően.