字符和字符串

1948 更新于: 2021-06-06 读完约需 15 分钟

概述

在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); // 你好,{世界}。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

本文永久链接码友网 » C#程序设计基础(入门篇) » 字符和字符串 分享:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册