CodeGym /课程 /C# SELF /转义、特殊字符和字符串插值

转义、特殊字符和字符串插值

C# SELF
第 9 级 , 课程 1
可用

1. 基本特殊字符和转义

在编程里,字符串不仅仅是字母,还能有各种特殊符号:引号、换行、制表符,有时候还会有像\n\t这样的标记。但如果你想在字符串里写你好, "user"!,编译器马上就会问:“字符串里的引号是啥意思,是不是写错了?”这时候就得用转义机制了。

在C#里,转义就是“告诉编译器某些字符要特殊对待”的一种方式。用到的就是反斜杠\(也叫backslash)。

经典特殊字符

序列 说明 演示
\n 换行 按了回车
\t 制表符 Tab
\\ 字面意义的“反斜杠” \
\" 字符串里的引号 "
\' 单引号(字符串里很少用) '
\r 回车(老式换行,很少用)
\0 Null字符 (不可见)
\b 退格(删除前一个字符——在控制台不一定有效)

怎么用

来,写几行带转义字符的代码,看看效果。


Console.WriteLine("你好, \"用户\"!");
// 输出: 你好, "用户"!

Console.WriteLine("C:\\Program Files\\MyApp");
// 输出: C:\Program Files\MyApp

Console.WriteLine("第一行\n第二行");
// 输出:
// 第一行
// 第二行

Console.WriteLine("我\t喜欢\tTab!");
// 输出:
// 我      喜欢   Tab!

就这样,靠一个小小的\,你就能把各种特殊字符“塞”进字符串里,编译器和队友都不会崩溃。

2. 普通字符串和逐字字符串(@-字符串)

如果你经常要写反斜杠,比如写文件路径,每次都写\\,真的很折磨。好在C#有逐字字符串(verbatim strings),开头加个@就行。

长啥样?


string path = "C:\\Users\\Ann\\Documents\\";
string verbatimPath = @"C:\Users\Ann\Documents\";

在逐字字符串里不用转义,反斜杠就是普通字符。但有个小坑:里面的引号要写成两个!


string quote = @"这是带引号的逐字字符串: ""Hello""!";
Console.WriteLine(quote);
// 输出: 这是带引号的逐字字符串: "Hello"!

直观对比

风格 语法 怎么用
普通 "C:\\Folder\\File.txt" 每个\都要写两个
逐字(@ @"C:\Folder\File.txt" 所有\都直接写
逐字+引号 @"Text 有""引号""在里面" 引号写两个

老司机小技巧:写文件路径、多行文本、正则模板时用逐字字符串,省心!

3. 换行和多行字符串

经常要写多行消息或者ASCII艺术。最直接的办法就是在普通字符串里用\n,或者用逐字字符串。逐字字符串会保留所有字符,包括换行。比如:


Console.WriteLine("第一行\n第二行");

Console.WriteLine(@"多行字符串。
不用转义换行
连Tab    也原样保留。");

C#最近还加了raw string literals(三引号),也能写多行文本,而且不用写双引号。比如:


string json = """
    {
        "name": "Alice",
        "age": 30,
        "skills": ["C#", "SQL", "Azure"]
    }
    """;

Console.WriteLine(json);

4. Unicode——C#里怎么存全世界的字符

现在大家不光用拉丁字母,还用西里尔字母、汉字、数学符号,甚至表情符号。这都多亏了字符编码系统——Unicode

Unicode是啥?

Unicode是国际标准,给每个字符分配唯一编号(code point),不管啥语言、啥平台都能用。所以你可以在C#里同时用俄文、英文、中文、甚至各种奇怪符号。

不同语言的字符串例子:


Console.WriteLine("Hello, 世界! 你好! مرحبا!");

字符串里的Unicode字符

你可以直接写支持的字符,也可以用转义序列,格式是\uXXXXXXXX是4位十六进制码。


Console.WriteLine("字符: \u263A"); // 输出 ☺

如果字符码大于65535(比如很多表情),用\UXXXXXXXX(8位):


Console.WriteLine("表情: \U0001F60A"); // 输出 😊

这有啥用?

  • 你可以存和处理任何文本。
  • 不用怕混合多种语言或用奇怪符号——C#和.NET天生支持Unicode。
  • 做国际化、支持各种字母表时特别重要。

5. 字符串里的表情和特殊符号

现在的字符串不只是字母,还有表情符号!比如你想发个带笑脸的消息给用户。

怎么加表情?

直接把表情贴进字符串:
复制你想要的表情(比如😊、🚀、🐱),直接粘贴到字符串里:


Console.WriteLine("你好! 😊");

用Unicode码:
大多数表情用\U加8位码。


Console.WriteLine("这是只猫: \U0001F431"); // 🐱

表情的Unicode码可以在网上查。

用表情时要注意啥

表情在字符串里可能占2个甚至更多字符(因为它们的Unicode码超过16位)。

有些操作(比如算字符串长度)会有“惊喜”:


string s = "😊";
Console.WriteLine(s.Length); // 可能输出2,不是1!

这是因为这个表情的codepoint用两个字符编码。

在控制台或网页上输出时,只要系统和字体支持,大部分表情都能正常显示。

带表情的字符串输出例子


Console.WriteLine("恭喜你成功啦! 🎉 你太棒了! 🚀");

6. 坑点和常见错误

新手经常会把引号和反斜杠的转义搞混。如果忘了转义,编译器会以为你提前结束了字符串。

错误示例:


Console.WriteLine("他说: "你好!""); // 错误!编译器懵了。

正确写法:


Console.WriteLine("他说: \"你好!\"");

还有,输出文件路径时,有人会这样写:


Console.WriteLine("C:\Temp\file.txt"); // 会报错或输出奇怪结果,比如:C:  emp ile.txt

因为\t\f是特殊字符(Tab和换页)。 修正有两种主流方法:


Console.WriteLine("C:\\Temp\\file.txt");    // 双斜杠
Console.WriteLine(@"C:\Temp\file.txt");     // 逐字字符串

记住:用逐字字符串时,如果里面要有引号,得写两个:


Console.WriteLine(@"文件 ""config.txt"" 没找到。"); // 文件 "config.txt" 没找到。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION