将包含大量特殊字符、格式和 Unicode 的文字文本和变量文本数据结合起来,构成对最终用户而言有意义的消息。
字符转义序列和逐字字符串
在C#中设置文本字符串的格式
C# 提供了大量用于设置字符串格式的选项。
字符转义序列
在 C# 中,转义字符序列以反斜杠 \
开头,后面再包含一个字符。 例如,\n
序列将添加一个新行,而 \t
序列将添加一个制表符。
Console.WriteLine("Hello\nWorld!");
Console.WriteLine("Hello\tWorld!");
Hello
World!
Hello World!
Console.WriteLine("Hello \"World\"!");
Hello "World"!
Console.WriteLine("c:\\source\\repos");
c:\source\repos
步骤1-使用字符转义序列设置命令行应用输出的格式
Console.WriteLine("Generating invoices for customer \"ABC Corp\" ...\n");
Console.WriteLine("Invoice: 1021\t\tComplete!");
Console.WriteLine("Invoice: 1022\t\tComplete!");
Console.WriteLine("\nOutput Directory:\t");
Generating invoices for customer "ABC Corp" ...
Invoice: 1021 Complete!
Invoice: 1022 Complete!
Output Directory:
逐字字符串文本
逐字字符串文本将保留所有空格和字符,而无需转义反斜杠。 要创建逐字字符串,请在文本字符串的前面使用 @
指令。
Console.WriteLine(@" c:\source\repos
(this is where your code goes)");
c:\source\repos
(this is where your code goes)
步骤2-使用逐字文本字符串设置命令行应用程序输出的格式
Console.Write(@"c:\invoices");
c:\invoices
Unicode转义字符
使用 \u
转义序列在文本字符串中添加编码字符,然后使用四个字符的代码表示 Unicode (UTF-16) 中的某些字符。
// Kon'nichiwa World
Console.WriteLine("\u3053\u3093\u306B\u3061\u306F World!");
こんにちは World!
步骤3-使用Unicode转义字符设置命令行应用程序输出的格式
// 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");
Console.WriteLine(@"c:\invoices\app.exe -j");
日本の請求書を生成するには:
c:\invoices\app.exe -j
回顾
关于设置文本字符串格式要记住的最重要的事项:
- 当需要在文本字符串中插入特殊字符时,请使用字符转义序列,例如制表符
\t
、换行符\n
或双引号\"
。 - 在所有其他情况下,需要使用反斜杠时,请对反斜杠
\\
使用转义字符。 - 使用
@
指令创建逐字字符串文本,以将所有空白格式和反斜杠字符保留在字符串中。 - 使用
\u
加上四个字符的代码来表示字符串中的 Unicode 字符 (UTF-16)。 - 根据应用程序的不同,Unicode 字符可能无法正确打印。
字符串串联
什么是字符串串联?
字符串串联是“程序员的表述”,指的是将两个或更多值简单合并成一个新值。 与相加不同,第二个值追加到第一个值的末尾,以此类推。
步骤1:删除代码编辑器中的所有代码。
步骤2:连接文本字符串和变量。
要将两个字符串连接在一起,请使用字符串连接运算符,即加号 +
。
string firstName = "Bob";
string message = "Hello " + firstName;
Console.WriteLine(message);
Hello Bob
步骤3:串联多个变量和文本字符串。
可以在同一行代码中执行多个串联操作。
string firstName = "Bob";
string greeting = "Hello";
string message = greeting + " " + firstName + "!";
Console.WriteLine(message);
Hello Bob!
步骤4:避免中间变量。
string firstName = "Bob";
string greeting = "Hello";
Console.WriteLine(greeting + " " + firstName + "!");
Hello Bob!
回顾:
主要理念:
- 通过字符串串联,可将较小的文字字符串和变量字符串合并成一个字符串。
- 如果添加中间变量不会增加可读性,则避免创建中间变量。
字符串内插
虽然字符串串联简单方便,但在需要将许多文本字符串和变量合并成带格式的单个消息的情况下,字符串内插越来越受欢迎。
什么是字符串内插?
字符串内插通过使用“模板”和一个/多个内插表达式将多个值合并为单个文本字符串。 内插表达式是一个变量,由一个左大括号和一个右大括号符号 { }
括起来。 当文本字符串以 $
字符为前缀时,该字符串将变为模板。
步骤 1:删除代码编辑器中的所有代码
步骤 2:使用字符串内插将文本字符串和变量值合并在一起
若要将两个字符串内插在一起,请创建一个文本字符串,并在字符串前面加上 $
符号。 文本字符串应包含至少一组大括号 {}。
string firstName = "Bob";
string message = $"Hello {firstName}!";
Console.WriteLine(message);
Hello Bob!
步骤 3:将字符串内插与多个变量和文本字符串一起使用
你可以在同一行代码中执行多个内插操作。
string firstName = "Bob";
string greeting = "Hello";
string message = $"{greeting} {firstName}!";
Console.WriteLine(message);
Hello Bob!
步骤 4:避免中间变量
string firstName = "Bob";
string greeting = "Hello";
Console.WriteLine($"{greeting} {firstName}!");
Hello Bob!
步骤 5:合并逐字文本和字符串内插
string projectName = "First-Project";
Console.WriteLine($@"C:\Output\{projectName}\Data");
C:\Output\First-Project\Data
回顾
主要理念:
- 字符串内插可减少某些情况下所需的字符数,与字符串串联相比实现了改进。
- 通过合并每个字符串的符号并将其用作字符串模板的前缀,可以合并字符串内插和逐字文本。
string projectName = "ACME";
string englishLocation = $@"c:\Exercise\{projectName}\data.txt";
Console.WriteLine($"View English output:\n\t\t{englishLocation}\n");
string russianMessage = "\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u0432\u044b\u0432\u043e\u0434";
string russianLocation = $@"c:\Exercise\{projectName}\ru-RU\data.txt";
Console.WriteLine($"{russianMessage}:\n\t\t{russianLocation}\n");
View English output: │
│ c:\Exercise\ACME\data.txt │
│ │
│ Посмотреть русский вывод: │
│ c:\Exercise\ACME\ru-RU\data.txt │
│ │
│