Übung: Kombinieren von Zeichenfolgen mithilfe von Escapezeichensequenzen
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
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.
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");
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
Ergänzen Sie unterhalb des zuvor hinzugefügten Codes die folgende Codezeile:
Console.Write(@"c:\invoices");
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.
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");
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");
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.