跳到主要内容

C# 字符串

提示
  1. 字符串的基本概念:在C#中,字符串是字符序列的集合,使用 string 关键字创建。例如,string str = "C# 编程"; 创建了一个包含文本 "C# 编程" 的字符串。
  2. 字符串操作和方法:C#提供了多种字符串操作方法,如 Length 属性获取字符串长度,Concat() 方法合并字符串,Equals() 方法比较字符串等。字符串还支持插值和转义序列以灵活处理文本。
  3. 字符串的不可变性:C#中的字符串是不可变的,意味着一旦创建,其内容不能更改。更改字符串实际上是创建新的字符串对象,而原始字符串被释放以供垃圾回收。

在 C# 中,字符串是一系列字符的序列。例如,"hello" 是一个包含字符序列 'h''e''l''l''o' 的字符串。

我们使用 string 关键字来创建字符串。例如,

// 创建字符串
string str = "C# 编程";

在这里,我们创建了一个名为 strstring,并赋予了文本 "C# 编程"。我们使用双引号来表示 C# 中的字符串。

示例:在 C# 中创建字符串

using System;
namespace CsharpString {
class Test {
public static void Main(string [] args) {

// 创建字符串
string str1 = "C# 编程";
string str2 = "Programiz";

// 打印字符串
Console.WriteLine(str1);
Console.WriteLine(str2);

Console.ReadLine();
}
}
}

输出

C# 编程
Programiz

在上面的示例中,我们创建了两个名为 str1str2 的字符串,并打印了它们。

注意:C# 中的字符串变量不是像 intchar 等原始类型。相反,它是 String 类的一个对象。

字符串操作

C# 字符串提供了各种方法来对字符串执行不同的操作。我们将研究一些常用的字符串操作。

1. 获取字符串的长度

要找到字符串的长度,我们使用 Length 属性。例如,

using System;
namespace CsharpString {
class Test {
public static void Main(string [] args) {

// 创建字符串
string str = "C# 编程";
Console.WriteLine("字符串: " + str);

// 获取 str 的长度
int length = str.Length;
Console.WriteLine("长度: "+ length);

Console.ReadLine();
}
}
}

输出

字符串: C# 编程
长度: 14

在上面的示例中,Length 属性计算字符串中的字符总数并返回。

2. 在 C# 中合并两个字符串

我们可以使用 Concat() 方法在 C# 中合并两个字符串。例如,

using System;
namespace CsharpString {
class Test {
public static void Main(string [] args) {

// 创建字符串
string str1 = "C# ";
Console.WriteLine("字符串 str1: " + str1);

// 创建字符串
string str2 = "编程";
Console.WriteLine("字符串 str2: " + str2);

// 合并两个字符串
string joinedString = string.Concat(str1, str2);
Console.WriteLine("合并后的字符串: " + joinedString);

Console.ReadLine();
}
}
}

输出

字符串 str1: C#
字符串 str2: 编程
合并后的字符串: C# 编程

在上面的例子中,我们创建了两个名为 str1str2 的字符串。注意以下语句,

string joinedString = string.Concat(str1, str2);

这里,Concat() 方法将 str1str2 连接起来,并将其赋值给 joinedString 变量。

我们也可以使用 C# 中的 + 运算符来连接两个字符串。想了解更多,请访问 C# 字符串 Concat

3. C# 比较两个字符串

在 C# 中,我们可以使用 Equals() 方法来比较两个字符串。Equals() 方法检查两个字符串是否相等。例如,

using System;
namespace CsharpString {
class Test {
public static void Main(string [] args) {

// 创建字符串
string str1 = "C# 编程";
string str2 = "C# 编程";
string str3 = "Programiz";

// 比较 str1 和 str2
Boolean result1 = str1.Equals(str2);
Console.WriteLine("字符串 str1 和 str2 相等: " + result1);

// 比较 str1 和 str3
Boolean result2 = str1.Equals(str3);
Console.WriteLine("字符串 str1 和 str3 相等: " + result2);

Console.ReadLine();
}
}
}

输出

字符串 str1 和 str2 相等: True
字符串 str1 和 str3 相等: False

在上述示例中,我们创建了三个名为 str1str2str3 的字符串。这里,我们使用 Equals() 方法来检查一个字符串是否等于另一个字符串。

字符串对象的不可变性

在 C# 中,字符串是不可变的。这意味着,一旦我们创建了一个字符串,就无法更改这个字符串。

为了理解这一点,请考虑一个示例:

// 创建字符串
string str = "Hello ";

这里,我们创建了一个名为 str 的字符串变量。该变量保存字符串 "Hello "

现在假设我们想要更改字符串 str

// 向前面的字符串示例中添加另一个字符串 "World"
str = string.Concat(str, "World");

这里,我们使用 Concat() 方法将字符串 "World" 添加到之前的字符串 str

但是当字符串是不可变的时,我们是如何修改它的呢?

让我们看看这里发生了什么,

  1. C# 获取字符串 "Hello " 的值。
  2. 通过将 "World" 添加到字符串 "Hello " 来创建一个新字符串。
  3. 创建一个新的字符串对象,赋值为 "Hello World",并将其存储在 str 中。
  4. 原始字符串 "Hello " 被分配给 str 后,因为没有其他变量持有对它的引用,所以被释放以进行垃圾回收。

字符串转义序列

转义字符用于转义字符串内部的某些字符。换句话说,我们使用转义序列在字符串内插入特殊字符。

假设我们需要在字符串中包含双引号。

// 包含双引号
string str = "This is the "String" class";

由于字符串是由双引号表示的,编译器将把 "This is the " 当作字符串。上述代码将导致错误。

为了解决这个问题,我们在 C# 中使用转义字符 \"。例如,

// 使用转义字符
string str = "This is the \"String\" class.";

现在通过在双引号 " 前使用 \,我们可以将它包含在字符串中。

C# 中的一些转义序列如下:

转义序列字符名称
\'single quote
\"double quote
\\backslash
\0null
\nnew line
\thorizontal tab

字符串插值

在 C# 中,我们可以使用字符串插值在字符串中插入变量。对于字符串插值,字符串字面量必须以 $ 字符开始。例如,

using System;
namespace CsharpString {
class Test {
public static void Main(string [] args) {

// 创建字符串
string name = "Programiz";

// 字符串插值
string message = $"欢迎来到 {name}";
Console.WriteLine(message);

Console.ReadLine();
}
}
}

输出

欢迎来到 Programiz

在上面的示例中,我们在 message 字符串中使用了 name 变量。

string message = $"欢迎来到 {name}";

注意,

  • 字符串字面量以 $ 开始
  • name 变量被放在花括号 {}

C# 字符串的方法

C# 中有各种字符串方法。其中一些如下所示:

方法描述
Format()返回格式化的字符串
Split()将字符串拆分为子字符串
Substring()返回字符串的子字符串
Compare()比较字符串对象
Replace()用指定的新字符替换指定的旧字符
Contains()检查字符串是否包含子字符串
Join()使用指定的分隔符连接给定的字符串
Trim()移除任何开头和结尾的空白
EndsWith()检查字符串是否以给定的字符串结尾
IndexOf()返回字符串中指定字符的位置
Remove()从字符串中返回字符
ToUpper()将字符串转换为大写
ToLower()将字符串转换为小写
PadLeft()返回字符串左侧用空格或指定的 Unicode 字符填充的字符串
PadRight()返回字符串右侧用空格或指定的 Unicode 字符填充的字符串
StartsWith()检查字符串是否以给定的字符串开头
ToCharArray()将字符串转换为 char 数组
LastIndexOf()返回指定字符串最后一次出现的索引

常见问题

  1. 如何在 C# 中创建字符串数组?

创建字符串数组与为数据类型创建数组的方式相同。例如,

using System;
namespace CsharpString {
class Test {
public static void Main(string [] args) {

// 字符串类型的数组
string[] animals = {"猴子", "狗", "猫"};

// 打印数组元素
Console.WriteLine(animals[0]);
Console.WriteLine(animals[1]);
Console.WriteLine(animals[2]);

Console.ReadLine();
}
}
}

输出

猴子


  1. C# 中 stringString 之间的区别

在技术上,stringString 之间没有区别。在 C# 中,stringSystem.String 的别名。

建议使用 string,因为即使没有使用 using System; 也可以工作。