3.6C#引用类型之字符串(String)

1.字符串声明

string 标识符 = "值";

2.获取字符串长度

a.Length

3.访问字符串

string str = "test";
char x = str[2];  // x = 's';

4.字符串连接

可使用 + 运算符 或 += 运算符连接字符串。

string userName = "<Type your name here>";
string dateString = DateTime.Today.ToShortDateString();
string str = "Hello " + userName + ". Today is " + dateString + ".";
str += " How are you today?";

5.字符串内插(Interpolation)

若要将字符串标识为字符串内插(Interpolation),可在该字符串 " 左引号前面加上 $ 美元符号( $ 和 " 之间不能有任何空格),然后在 " 左引号 与 " 右引号 之间插入各种形式的 {内插表达式}

5.1内插表达式形式

//负整数左对齐,正整数右对齐
//整数值代表宽度
{内插表达式[,±整数][:格式]}

5.2字符串内插

string name = "Mark";
var date = DateTime.Now;
Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.");
// 输出:Hello, Mark! Today is Wednesday, it's 19:40 now.

5.3转义序列

var userName = "Jane";

//支持普通的字符串转义序列
var stringWithEscapes = $"C:\\Users\\{userName}\\Documents";
//以 $ 字符开头,后跟 @(原义) 字符
var verbatimInterpolated = $@"C:\Users\{userName}\Documents";
Console.WriteLine(stringWithEscapes);
Console.WriteLine(verbatimInterpolated);
// C:\Users\Jane\Documents
// C:\Users\Jane\Documents

//两个双引号不会被 @(原义) 输出
string s2 = $@"He said, ""This is the last \u0063hance\x0021""";
输出:He said, "This is the last \u0063hance\x0021"

//若要包含大括号 "{" 或 "}",在前面加两个大括号 "{{" 或 "}}"。
var xs = new int[] { 1, 2, 7, 9 };
var ys = new int[] { 7, 9, 12 };
Console.WriteLine($"Find the intersection of the {{{string.Join(", ",xs)}}} and {{{string.Join(", ",ys)}}} sets.");
// Find the intersection of the {1, 2, 7, 9} and {7, 9, 12} sets.

5.4三元条件运算符

因为冒号 (:) 在具有内插表达式的项中具有特殊含义,为了在内插表达式中使用三元条件运算符,请将内插表达式放在括号内。

var rand = new Random();
for (int i = 0; i < 7; i++)
{
    Console.WriteLine($"Coin flip: {(rand.NextDouble() < 0.5 ? "heads" : "tails")}");
}

6.复合格式字符串

复合格式字符串不需要加 $美元符号,{内插表达式} 为代表位置的整数索引。

强烈推荐使用字符串内插,因为字符串内插可用于任何字符串,而复合格式字符串必须调用 String.Format() 方法或支持复合格式字符串的其它方法,比如 Console.WriteLine() 或 StringBuilder.AppendFormat() 。

6.1内插表达式形式

//负整数左对齐,正整数右对齐
//整数值代表宽度
{索引[,±整数][:格式]}

6.2复合格式字符串

Console.WriteLine("Hello, {0}! Today is {1}, it's {2:HH:mm} now.", name, date.DayOfWeek, date);
// 同样地输出:Hello, Mark! Today is Wednesday, it's 19:40 now.

6.3转义序列

var userName = "Jane";

//支持普通的字符串转义序列
var stringWithEscapes = "C:\\Users\\{userName}\\Documents";
//字符串前加 @ 字符,表示原义输出
var verbatimInterpolated = @"C:\Users\{userName}\Documents";
Console.WriteLine(stringWithEscapes);
Console.WriteLine(verbatimInterpolated);
// C:\Users\Jane\Documents
// C:\Users\Jane\Documents

//两个双引号不会被 @(原义) 输出
string s2 = @"He said, ""This is the last \u0063hance\x0021""";
输出:He said, "This is the last \u0063hance\x0021"

//若要包含大括号 "{" 或 "}",在前面加一个大括号 "{" 或 "}"。
string result;
int nOpen = 1;
int nClose = 2;
result = String.Format("The text has {0} {{ characters and {1} }} characters.", 
nOpen, nClose);
Console.WriteLine(result);
//The text has 1 { characters and 2 } characters.

7.字符串转义序列

转义序列字符名称Unicode 编码
\'单引号0x0027
\"双引号0x0022
\\反斜杠0x005C
\0null0x0000
\a警报0x0007
\b退格(Backspace)0x0008
\f换页0x000C
\n换行0x000A
\r回车(Enter)0x000D
\t水平制表符0x0009
\v垂直制表符0x000B
\uUnicode 转义序列 (UTF-16)\uHHHH(范围:0000 – FFFF;示例:\u00E7 =“ç”)
\UUnicode 转义序列 (UTF-32)\U00HHHHHH(范围:000000 – 10FFFF;示例:\U0001F47D = “👽”)
\x除长度可变外,Unicode 转义序列与“\u”类似\xH[H][H][H](范围:0 – FFFF;示例:\x00E7\x0E7 或 \xE7 =“ç”)

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/csharplang/7945.html

(0)
上一篇 2021年3月5日 22:21
下一篇 2021年3月6日 01:45

相关推荐

  • 5.1C#异步编程运行机制

    C#语言的异步编程是基于任务的异步编程(Task Asynchronous Programming,简写TAP)模型,该模型的核心是 Task 和 Task<T> 对象以及 async 和 await 关键字。 1.异步方法声明…

    C#语言教程 2021年5月1日
    01860
  • 3.1C#语言的命名空间(Namespace)

    1.命名空间声明 C# 10 中可使用文件范围的命名空间声明,一个文件中的所有类型都在一个命名空间中。文件范围的命名空间不能声明嵌套的命名空间或第二个文件范围的命名空间。 可以在两个或多个声明中定义一个命名空间。 2.using指令 2.1导入其它命名空间的类型 2.2创建命名空间别名 using 指令的声明…

    C#语言教程 2021年3月1日
    03640
  • 3.8C#引用类型之集合(Collection)

    与数组不同,集合的长度(元素的个数)可以动态改变,可以向集合添加、删除元素 。 1.集合分类 1.1System.Collections.Generic 类 当集合中的所有元素都具有相同的数据类型时,泛型集合会非常有用。 类 说明 Dictionary<TKey,TValue> 表示基于键进行组织的键/值对…

    C#语言教程 2021年3月8日
    02480

发表评论

登录后才能评论