Übung: Kombinieren von Zeichenfolgen mithilfe von Escapezeichensequenzen

Abgeschlossen

Angenommen, Sie wurden damit beauftragt, ein Modell für ein Befehlszeilentool zu erstellen, das Rechnungen in englischer und japanischer Sprache generiert. Sie müssen die Funktionalität zur Generierung von Rechnungen noch nicht programmieren. Sie müssen nur die Befehlszeilenschnittstelle für interne Kunden in der Abrechnungsabteilung erstellen, damit diese sie genehmigen können. Ihr Vorgesetzter hat Ihnen aufgetragen, eine Formatierung auszuarbeiten, durch die der aktuelle Fortschritt des Tools eindeutig ist. Sie sollen auch Anweisungen in japanischer Sprache einfügen, die japanischen Benutzern das Generieren von Rechnungen erläutern.

Übung: Formatieren von Literalzeichenfolgen in C#

In dieser Übung lernen Sie verschiedene Techniken für die Anzeige von Sonderzeichen und das Hinzufügen verschiedener Formatierungstypen zur Ausgabe kennen.

Escapezeichensequenzen

Eine Escapezeichensequenz ist eine Anweisung an die Runtime, dass ein Sonderzeichen eingegeben wird, das sich auf die Ausgabe der Zeichenfolge auswirkt. In C# beginnt die Escapezeichensequenz mit einem umgekehrten Schrägstrich \, gefolgt von dem Zeichen, auf das der Escapevorgang ausgeführt wird. Die Sequenz \n fügt beispielsweise eine neue Zeile hinzu, die Sequenz \t einen Tabstopp.

Im folgenden Code werden Escapezeichensequenzen verwendet, um Zeilenumbrüche und Tabstopps hinzuzufügen.

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

Wenn Sie den Code ausführen, erhalten Sie die folgende Ausgabe:

Hello
World!
Hello   World!

Was wäre, wenn Sie doppelte Anführungszeichen in eine Literalzeichenfolge einfügen müssten? Wenn Sie keine Escapezeichensequenz verwenden, verwirren Sie den Compiler, da dieser die Eingabe so interpretiert, als würden Sie die Zeichenfolge vorzeitig löschen möchten. Der Compiler versteht den Zweck der Zeichen nach dem zweiten doppelten Anführungszeichen nicht.

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

Der .NET-Editor zeigt eine rote Wellenlinie unter World an. Wenn Sie versuchen, den Code trotzdem auszuführen, wird folgende Ausgabe angezeigt:

(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

Verwenden Sie die Escapesequenz \", um diese Situation zu vermeiden:

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

Wenn Sie den obigen Code ausführen, sollte folgende Ausgabe angezeigt werden:

Hello "World"!

Was wäre, wenn Sie den umgekehrten Schrägstrich für andere Zwecke (z. B. für einen Dateipfad) verwenden müssten?

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

Leider sieht C# den umgekehrten Schrägstrich ausschließlich für Escapesequenzen vor. Wenn Sie den Code ausführen, zeigt der Compiler also folgenden Fehler an:

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

Das Problem liegt bei der Sequenz \s. Die Sequenz \r erzeugt keinen Fehler, da es sich um eine gültige Escapesequenz für einen Wagenrücklauf handelt. Einen Wagenrücklauf möchten Sie in diesem Kontext jedoch nicht verwenden.

Verwenden Sie \\, um einen einzelnen umgekehrten Schrägstrich anzuzeigen und das Problem zu beheben.

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

Wenn Sie dem umgekehrten Schrägstrich ein Escapezeichen voranstellen, wird die gewünschte Ausgabe erzeugt:

c:\source\repos

Formatieren der Ausgabe mithilfe von Escapezeichensequenzen

  1. Wählen Sie den gesamten Code im .NET-Editor aus, und drücken Sie dann ENTF oder die RÜCKTASTE, um den Code zu löschen.

  2. Fügen Sie folgenden Code im Editor ein, um auch ein Modell der Befehlszeile zu erstellen:

    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. Führen Sie anschließend den Code aus. In der Konsolenausgabe wird das folgende Ergebnis angezeigt:

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

Ausführliche Zeichenfolgenliterale

Ein ausführliches Zeichenfolgenliteral behält alle Leerräume und Zeichen bei, ohne dass dem umgekehrte Schrägstrich ein Escapezeichen vorangestellt werden muss. Verwenden Sie die Anweisung @ vor der Literalzeichenfolge, um eine ausführliche Zeichenfolge zu erstellen.

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

Beachten Sie, dass die Zeichenfolge sich über zwei Zeilen erstreckt und das von dieser C#-Anweisung generierte Leerzeichen in der folgenden Ausgabe beibehalten wird.

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

Formatieren der Ausgabe mit ausführlichen Zeichenfolgenliteralen

  1. Ergänzen Sie unterhalb des zuvor hinzugefügten Codes die folgende Codezeile:

    Console.Write(@"c:\invoices");
    
  2. Führen Sie anschließend den Code aus. Sie sehen das folgende Ergebnis, das das „Ausgabeverzeichnis“ enthält:

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

Unicode-Escapezeichen

Sie können mithilfe der Escapesequenz \u und einem vierstelligen Zeichencode, der für ein Unicode-Zeichen (UTF-16) steht, auch codierte Zeichen zu einer Literalzeichenfolge hinzufügen.

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

Hinweis

Hierbei gibt es jedoch mehrere Einschränkungen. Einerseits können einige Konsolen wie die Windows-Eingabeaufforderung nicht alle Unicode-Zeichen darstellen. Diese Zeichen werden durch Fragezeichen ersetzt. Andererseits wird in diesen Beispielen UTF-16 verwendet. Für einige Zeichen ist UTF-32, also eine andere Escapesequenz, erforderlich. Das ist ein kompliziertes Thema, und in diesem Modul sollen lediglich einige Möglichkeiten aufgezeigt werden. Je nach Ihren Anforderungen müssen Sie viel Zeit investieren, um zu lernen, wie Sie in Ihren Anwendungen mit Unicode-Zeichen arbeiten können.

Formatieren der Ausgabe mit Unicode-Escapezeichen

Um das Modell des Befehlszeilentools abzuschließen, fügen Sie einen Ausdruck auf Japanisch hinzu, der übersetzt lautet: „So generieren Sie japanische Rechnungen“. Anschließend zeigen Sie eine ausführliche Literalzeichenfolge an, die einen Befehl darstellt, den der Benutzer bzw. die Benutzerin eingeben kann. Zur Formatierung werden außerdem einige Escapesequenzen hinzugefügt.

  1. Fügen Sie Ihrer Anwendung den folgenden Code hinzu:

    // 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. Um sicherzustellen, dass Ihr Code korrekt ist, vergleichen Sie ihn mit folgendem Code:

    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. Führen Sie anschließend den Code aus. In der Konsolenausgabe wird das folgende Ergebnis angezeigt:

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

Zusammenfassung

Das haben Sie bisher über das Formatieren von Literalzeichenfolgen gelernt:

  • Verwenden Sie Escapezeichensequenzen, wenn Sie ein Sonderzeichen (z. B. ein Tabstopp \t, eine neue Zeile \n, oder doppelte Anführungszeichen \") zu einer Literalzeichenfolge hinzufügen müssen.
  • Verwenden Sie in allen anderen Fällen ein Escapezeichen für den umgekehrten Schrägstrich \\, wenn ein umgekehrter Schrägstrich verwendet werden muss.
  • Verwenden Sie die Direktive @, um ein ausführliches Zeichenfolgenliteral zu erstellen, mit dem alle Formatierungen (z. B. Leerräume) und Sonderzeichen (z. B. umgekehrte Schrägstriche) in einer Zeichenfolge beibehalten werden.
  • Verwenden Sie \u und einen vierstelligen Zeichencode, um Unicode-Zeichen (UTF-16) in einer Zeichenfolge darzustellen.
  • Unicode-Zeichen werden je nach Anwendung möglicherweise nicht richtig dargestellt.