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字符
你可以直接写支持的字符,也可以用转义序列,格式是\uXXXX,XXXX是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" 没找到。
GO TO FULL VERSION