总目录
媒介
本文主要先容 string literals,string literals 在MSDN 中文文档中有翻译成 字符串字面量也有翻译成字符串文本的,本文统一利用字符串文本。
一、先容
在利用C# 编程的过程中,通过会利用string 范例 来界说 字符串文本。
二、字符串文本
1. 带引号的字符串文本
1)正常利用
- 带引号的字符串文本在同一行上以单个双引号字符 (") 开头和末端。
- string str = "hello world!";
复制代码
- 带引号的字符串文本最适合匹配单个行且不包含任何转义序列的字符串。
- 带引号的字符串文本,可以包含任何字符文本,但是某些内容需要利用转义符才能精确表示
2)包含转义符的利用
- 当需要用string 表示一个路径的时候,假如直接用路径表示,则会报错;加上 \ 转义符后,才得以精确的表示路径
- static void Main(string[] args)
- {
- string path = "E:\\MyCode\\my-study";
- Console.WriteLine(path); //输出:E:\MyCode\my-study
- }
复制代码
- 当我们想要输出 带有 “” 的字符串文本的时候,我们同样需要加上 \ 转义符
- static void Main(string[] args)
- {
- string str = "{"K":"V"}";
- Console.WriteLine(str); //输出:{"K":"V"}
- }
复制代码
- 当我们想要输出 可以换行的字符串文本的时候,我们需要加上 \r\n
- static void Main(string[] args)
- {
- string str = "{\r\n "K":"V" \r\n}";
- Console.WriteLine(str);
- /*
- 输出:
- {
- "K":"V"
- }
- */
- }
复制代码 在利用带引号的字符串文本的时候,我们发现在想精确的表示某些字符串文本的时候,需要加上各种各样的转义符,还得逐个添加,其实是极其的不方便。因此带引号的字符串文本最适合匹配单个行且不包含任何转义序列的字符串。
2. 逐字字符串文本
1)正常利用
- 对于多行字符串、包含反斜杠字符或嵌入双引号的字符串,逐字字符串文本更方便。
- 逐字字符串将新的行字符作为字符串文本的一部分保留。 利用双引号在逐字字符串内部嵌入引号。
- 逐字字符串文本 利用@ 符号 界说字符串文本,这时大部分的字符不需要转义符转移,只是“ 要转义成 ”“
- static void Main(string[] args)
- {
- string path = @"E:\MyCode\my-study";
- Console.WriteLine(path);
- string str = @"{""K"":""V""}";
- Console.WriteLine(str);
- string quote = @"我的名字叫 ""鲤籽鲲。""";
- Console.WriteLine(quote);
- string str2 = @"大家好,
- 我叫鲤籽鲲,很高兴认识大家!";
- Console.WriteLine(str2);
-
- }
复制代码 可以将逐字字符串文本理解为 带引号的字符串文本的 升级版,大部分的字符不需要转义符转移,只是“ 要转义成 ”“,感觉照旧不够直观。
2)与$ 符号一起利用
- static void Main(string[] args)
- {
- string name = "鲤籽鲲";
- string str = $@"我的名字叫 ""{name}。""";
- Console.WriteLine(str); //我的名字叫 "鲤籽鲲。"
- }
复制代码- static void Main(string[] args)
- {
- string nickName = "小鲤鱼";
- string str = $@"我的昵称叫做:{{nickName}}";
- Console.WriteLine(str); // 我的昵称叫做:{nickName}
- str = $@"我的昵称叫做:{{{nickName}}}";
- Console.WriteLine(str); // 我的昵称叫做:{小鲤鱼}
- }
复制代码
- 当 @ 和 $ 内插字符串符号一起利用的时候,假如想要输出{},则需要转义成{{}}
- 如上例中 {{nickName}} 是无法解析string的值,而{{{nickName}}} 可以解析
3. 原始字符串文本
- 从 C# 11 开始,可以利用原始字符串文本更轻松地创建多行字符串,或利用需要转义序列的任何字符。
- 原始字符串文本无需利用转义序列。 你可以编写字符串,包括空格格式,以及你希望在输出中表现该字符串的方式。
- 原始字符串文本:
- 以至少三个双引号字符序列 (""") 开头和末端。
- 可以利用三个以上的连续字符开始和结束序列,以支持包含三个(或更多)重复引号字符的字符串文本。
- 单行原始字符串字面量需要左引号和右引号字符位于同一行上。
- 多行原始字符串字面量需要左引号和右引号字符位于各自的行上。
- 在多行原始字符串字面量中,会删除右引号左侧的任何空格。
1)正常利用
以至少三个双引号字符序列 (""") 开头和末端 表示原始字符串文本,无需利用转义序列。
- static void Main(string[] args)
- {
- string path = """E:\MyCode\my-study""";
- Console.WriteLine(path); //E:\MyCode\my-study
- string str = """{"K":"V"}""";
- Console.WriteLine(str); //{"K":"V"}
- string quote = """我的名字叫 ""鲤籽鲲。"" """;
- Console.WriteLine(quote); //我的名字叫 ""鲤籽鲲。""
- }
复制代码 2)输出大于3个双引号的字符串文本
可以利用三个以上的连续字符开始和结束序列,以支持包含三个(或更多)重复引号字符的字符串文本。
- static void Main(string[] args)
- {
- Console.WriteLine(""" "C#/.NET" """); // "C#/.NET"
- Console.WriteLine(""" ""C#/.NET"" """); // ""C#/.NET""
- Console.WriteLine("""" """C#/.NET""" """"); // """C#/.NET"""
- Console.WriteLine(""""" """"C#/.NET"""" """""); // """"C#/.NET""""
- }
复制代码 3)单行原始字符串文本
单行原始字符串字面量需要左引号和右引号字符位于同一行上。
精确利用:
- string singleLine = """Friends say "hello" as they pass by.""";
复制代码 错误利用:
- // CS8997: Unterminated raw string literal.
- var multiLineStart = """This
- is the beginning of a string
- """;
- // CS9000: Raw string literal delimiter must be on its own line.
- var multiLineEnd = """
- This is the beginning of a string """;
复制代码
3)多行原始字符串文本
多行原始字符串字面量需要左引号和右引号字符位于各自的行上。
精确利用:
- string multiLine = """
- "Hello World!" is typically the first program someone writes.
- """;
- string embeddedXML = """
- <element attr = "content">
- <body style="normal">
- Here is the main text
- </body>
- <footer>
- Excerpts from "An amazing story"
- </footer>
- </element >
- """;
复制代码 错误利用:
- // CS8999: Line does not start with the same whitespace as the closing line
- // of the raw string literal
- var noOutdenting = """
- A line of text.
- Trying to outdent the second line.
- """;
复制代码
4)与 $ 符号一起利用
- static void Main(string[] args)
- {
- string name = "鲤籽鲲";
- string str = $""" ""我的名字叫 ""{name}。"" """;
- Console.WriteLine(str); //我的名字叫 "鲤籽鲲。"
- }
复制代码- static void Main(string[] args)
- {
- string nickName = "小鲤鱼";
- string str = $$""" 我的昵称叫做:{{nickName}}""";
- Console.WriteLine(str); // 我的昵称叫做:小鲤鱼
- str = $$""" 我的昵称叫做:{{{nickName}}} """;
- Console.WriteLine(str); // 我的昵称叫做:{小鲤鱼}
- str = $$$""" 我的昵称叫做:{{{nickName}}} """;
- Console.WriteLine(str); // 我的昵称叫做:小鲤鱼
- }
复制代码
- 当原始字符串文本与$ 一起利用的时候,假如需要解析{}中变量的值,则需要通过1个或多个$ 举行解析
5)小结
- 利用带引号的字符串文本或逐字字符串文本时,假如天生的文本包括需要转义序列的字符,应思量原始字符串文本。
- 原始字符串字面量将更易于你和其他人阅读,因为它更类似于输出文本
- 例如利用原始字符串文本 表示 Json字符串 会相较于前两种方法更易阅读
- string jsonString = """
- {
- "Date": "2019-08-01T00:00:00-07:00",
- "TemperatureCelsius": 25,
- "Summary": "Hot",
- "DatesAvailable": [
- "2019-08-01T00:00:00-07:00",
- "2019-08-02T00:00:00-07:00"
- ],
- "TemperatureRanges": {
- "Cold": {
- "High": 20,
- "Low": -10
- },
- "Hot": {
- "High": 60,
- "Low": 20
- }
- },
- "SummaryWords": [
- "Cool",
- "Windy",
- "Humid"
- ]
- }
- """;
复制代码 4. 字符串转义序列
- \字符 - 转义字符(Escape Character),\字符用于创建转义序列,表示特殊字符或控制字符。
- 常见的转义序列包括:
- \\ - 表示反斜杠字符本身。
- \" - 表示双引号字符。
- \' - 表示单引号字符。
- \n - 表示换行符。
- \r - 表示回车符。
- \t - 表示制表符。
- …
- \\ 利用案例
- static void Main(string[] args)
- {
- string path = "E:\\MyCode\\my-study";
- Console.WriteLine(path); //输出:E:\MyCode\my-study
- }
复制代码
- static void Main(string[] args)
- {
- string str = "{"K":"V"}";
- Console.WriteLine(str); //输出:{"K":"V"}
- }
复制代码
- static void Main(string[] args)
- {
- string columns = "Column 1\tColumn 2\tColumn 3";
- Console.WriteLine(columns);
- }
复制代码
- string rows = "Row 1\r\nRow 2\r\nRow 3";
- /* Output:
- Row 1
- Row 2
- Row 3
- */
复制代码
- static void Main(string[] args)
- {
- string str = "hello\b world !";
- Console.WriteLine(str); //hell world !
- }
复制代码
- string title = ""The \u00C6olean Harp", by Samuel Taylor Coleridge";
- //Output: "The Æolean Harp", by Samuel Taylor Coleridge
复制代码 结语
回到目录页:C# 知识汇总
希望以上内容可以资助到各人,如文中有不对之处,还请批评指正。
参考资料:
字符串和字符串字面量
原始字符串字面量 - 字符串字面量中的 “”"
内置引用范例(C# 引用)
String 类
System.String 类
C#11的原始字符串
C# 11 新特性:原始字符串
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |