概述
在C#编程语言中,对于文本而言,分为字符和字符串。使用char
来声明字符类型的变量,而使用string
来声明字符串类型的变量。
下面我们详细讲解字符与字符串的使用和区别。
字符
C#语言中,字符(char
)类型被一对单引号括起来,其中只能包含任意单个字符(这里的任意字符表示可以为字母,数字,汉字,空格,特殊符号等等),字符声明如下:
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
char a = 'a'; // 小写字母a
char A = 'A'; // 大写字母A
char one = '1'; // 数字1
char dot = '.'; // 特殊符号(.)
char star = '*'; // 特殊符号(*)
char space = ' '; // 空格
char firstName = '刘'; // 汉字
// ...
char error = 'AB'; // 语法错误(一个字符变量只能包含单个字符)
}
}
}
字符串
在C#中,字符串是用来表示文本的一系列字符。它可以是用双引号括起来的一个字符、一个单词或一长段字符。以下是字符串字面量:
"A"
"Hello"
"你好,世界"
C#语言提供了string
的类型来存储字符串。字符串类型的变量可以声明和赋值字符串文字,如下所示:
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string a = "a"; // 小写字母a
string A = "A"; // 大写字母A
string one = "1"; // 数字1
string dot = "."; // 特殊符号(.)
string star = "*"; // 特殊符号(.)
string space = " "; // 空格
string firstName = "刘"; // 汉字
string hello = "Hello"; // 单词
string sentence = "这是一个完整字符串句子的示例。";
}
}
}
一个字符串变量的最大存储长度约为10亿个字符(大约2G大小存储空间)。然而,实际的最大存储长度与计算机的内存和CPU有一定的关系。
思考:字符和字符串的区别是什么呢?
在C#中,有两种声明字符串变量的方式,分别为使用关键字string
声明和使用System.String
类声明,这两种声明的字符串变量并无区别,如下:
string hello1 = "Hello"; // 使用关键字string声明字符串变量
System.String hello2 = "Hello"; // 使用关键字System.String声明字符串变量
回顾:如果你还记得我们之前学过的《C#隐式类型变量》,尝试使用关键字
var
声明一个字符串类型的变量应该如何编写呢?
在C#语言中,一个字符串本质上是一组字符的集合,所以,我们还可以使用字符数组来创建一个字符串,如下示例:
char[] arr = new[] {'H', 'e', 'l', 'l', 'o'};
string hello = new string(arr);
Console.WriteLine(hello); // 输出结果:Hello
注:由于我们还未学习数组等知识,这里的由字符数组创建字符串的方式作为了解,后续课程将深入学习。
特殊字符
现实世界中的文本可以包含任何字符。但在C#语言中,因为字符串是用双引号括起来的,所以不能直接包含双引号,如下的写法是错误的:
string hello = "Hello, this is a "string" in C#.";
在C#语言中,像\
,\n
,\r
,\t
,"
,'
等被称为特殊符号,字符串中的特殊符号需使用转义符\
进行转换,比如上面的字符串通过转义符转义:
string hello = "Hello, this is a \"string\" in C#.";
Console.WriteLine(hello);
输出结果为:
Hello, this is a "string" in C#.
在Windows操作系统中,存储在磁盘上的资源都有一个具体的路径,字符串表示为:D:\Program Files\Visual Studio\Dev.exe
。此字符串中包含了转义字符\
,如果直接在C#中作为变量的值是不允许的,如下的会报错:
string path = "D:\Program Files\Visual Studio\Dev.exe";
编译器报错如下图所示:
编译器报错:无法识别的转义序列
这时就需要使用到上面介绍的转义字符\
来处理,如下:
string path = "D:\\Program Files\\Visual Studio\\Dev.exe";
Console.WriteLine(path);
输出结果为:
D:\Program Files\Visual Studio\Dev.exe
在C#语言中,除了使用转义字符\
对特殊符号进行转义外,还可以用@
符号对部分特殊符号进行转义,它被放在字符串变量的左边双引号前面。比如上面的磁盘路径,如果用\
符号转义,需要对每个斜杠\
进行处理,而用@
符号的转义如下:
string path = @"D:\Program Files\Visual Studio\Dev.exe";
试一试:
string path = @"D:\\Program Files\\Visual Studio\\Dev.exe";`
请动手试一试以上这条语句输出的结果是什么?
以@
符号开头的字符串变量中,还支持多行文本,如下:
string path = @"这是一个
多行文本
的示例";
Console.WriteLine(path);
输出结果:
这是一个
多行文本
的示例
如果不使用@
进行转义,则编译器会报错,如下图:
温馨提示:C#中的转义符
\
或@
的意义在于告诉编译:“字符串中的特殊符号请保留原样”。
请注意,在字符串中必须使用反斜杠(\
)来转义双引号。@
只用于C#中的特殊字符,示例如下:
string text1 = @"这是一段C#中关于"转义符"使用的字符串"; // 错误
string text2 = @"这是一段C#中关于\"转义符使\"用的字符串"; // 错误
string text3 = "这是一段C#中关于"转义符使"用的字符串"; // 错误
string text4 = "这是一段C#中关于\"转义符\"使用的字符串"; // 正确
字符串连接
1.加号拼接
在C#语言中,可以使用操作符加号(+
)来连接两个或者多个字符串,使用其连接成一个新的字符串,如下示例:
string firstName = "Rector";
string lastName = "Liu";
string fullName = firstName + " " + lastName;
Console.WriteLine(fullName); // 输出结果为:Rector Liu
字符串在C#中是不可变的,也就是说它是只读的,一旦在内存中创建,就不能更改。每次对字符串进行拼接后,.NET CLR将为拼接的字符串创建一个新的内存位置。因此,如果拼接的字符串超过5个,建议使用
StringBuilder
而不是string
。
字符串之间的+
操作是字符串拼接在一起,而数字之间的加(+
)操作是将两个数字相加。
试一试:
string num1 = "2"; string num2 = "3"; string sum = num1 + num2; Console.WriteLine(sum);
请尝试运行以上代码片段,看一看运行后得到的
sum
的值是多少呢?
2.字符串格式化
C#中,字符串拼接除了可以使用操作符加号(+
)外,还可以使用字符串格式化方法string.Format()
。
string.Format()
方法的作用是根据指定的格式将对象的值转换为字符串,并将其插入到另一个字符串中。
string.Format()
的基本语法为:
string var1= string.Format("<{0}><{1}><N>",para0,para1,...,paraN)
其中的{0},{1},{N}均表示点位符,C#编译器在编译的时候会自动将para0的值填充到{0}的位置,将para2的值填充到{1}的位置,依此类推。
使用示例如下:
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string firstName = "Rector";
string lastName = "Liu";
string language = "C#";
string hello = string.Format("大家好,我是{0} {1},欢迎来到{2}的世界。", firstName, lastName, language);
Console.WriteLine(hello); // 大家好,我是Rector Liu,欢迎来到C#的世界。
}
}
}
string.Format()
方法还有很多重载方法,还支持不同数据类型的格式化等等。后续用到string.Format()
方法时再详细讲解,这里只做了解即可。
3.字符串插值法
C# 6.0以后,新增了字符串插值法的特性,其使用语法为:
string var1= $"<{变量1}><{变量2}><{变量N}>";
字符串插值法:定义变量时,以
$
符号作为赋值语句的开头,使用一对大括号将变量括起来。
使用示例如下:
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string firstName = "Rector";
string lastName = "Liu";
string language = "C#";
string hello = $"大家好,我是{firstName} {lastName},欢迎来到{language}的世界。";
Console.WriteLine(hello); // 大家好,我是Rector Liu,欢迎来到C#的世界。
}
}
}
注:在字符串插值法中,如果需要在字符串输出大括号时,请输入
{{
或者}}
,如下:string hello = $"你好,{{世界}}。"; Console.WriteLine(hello); // 你好,{世界}。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册