在 C# 中,字符串是字符序列。例如,"hello"
是一个字符串,包含字符 'h'
、'e'
、'l'
、'l'
和 'o'
的序列。
我们使用 string
关键字来创建字符串。例如:
// create a string
string str = "C# Programming";
在这里,我们创建了一个名为 str 的 string
,并为其赋值了文本 "C# Programming"
。我们在 C# 中使用双引号来表示字符串。
示例:在 C# 中创建字符串
using System;
namespace CsharpString {
class Test {
public static void Main(string [] args) {
// create string
string str1 = "C# Programming";
string str2 = "Programiz";
// print string
Console.WriteLine(str1);
Console.WriteLine(str2);
Console.ReadLine();
}
}
}
输出
C# Programming Programiz
在上面的示例中,我们创建了两个名为 str1 和 str2 的字符串并打印了它们。
注意:C# 中的字符串变量不是像 int
、char
等这样的原始类型。相反,它是 String
类的一个对象。
字符串操作
C# 字符串提供了多种方法来执行不同的字符串操作。我们将介绍一些常用的字符串操作。
1. 获取字符串的长度
要查找字符串的长度,我们使用 Length
属性。例如:
using System;
namespace CsharpString {
class Test {
public static void Main(string [] args) {
// create string
string str = "C# Programming";
Console.WriteLine("string: " + str);
// get length of str
int length = str.Length;
Console.WriteLine("Length: "+ length);
Console.ReadLine();
}
}
}
输出
string: C# Programming Length: 14
在上面的示例中,Length
属性计算字符串中字符的总数并返回它。
2. 在 C# 中连接两个字符串
我们可以使用 Concat()
方法在 C# 中连接两个字符串。例如:
using System;
namespace CsharpString {
class Test {
public static void Main(string [] args) {
// create string
string str1 = "C# ";
Console.WriteLine("string str1: " + str1);
// create string
string str2 = "Programming";
Console.WriteLine("string str2: " + str2);
// join two strings
string joinedString = string.Concat(str1, str2);
Console.WriteLine("Joined string: " + joinedString);
Console.ReadLine();
}
}
}
输出
string str1: C# string str2: Programming Joined string: C# Programming
在上面的示例中,我们创建了两个名为 str1 和 str2 的字符串。请注意以下语句:
string joinedString = string.Concat(str1, str2);
在这里,Concat()
方法连接 str1 和 str2 并将其赋值给 joinedString 变量。
我们也可以使用 C# 中的 +
运算符连接两个字符串。要了解更多信息,请访问C# String Concat。
3. C# 比较两个字符串
在 C# 中,我们可以使用 Equals()
方法来比较两个字符串。Equals()
方法检查两个字符串是否相等。例如:
using System;
namespace CsharpString {
class Test {
public static void Main(string [] args) {
// create string
string str1 = "C# Programming";
string str2 = "C# Programming";
string str3 = "Programiz";
// compare str1 and str2
Boolean result1 = str1.Equals(str2);
Console.WriteLine("string str1 and str2 are equal: " + result1);
//compare str1 and str3
Boolean result2 = str1.Equals(str3);
Console.WriteLine("string str1 and str3 are equal: " + result2);
Console.ReadLine();
}
}
}
输出
string str1 and str2 are equal: True string str1 and str3 are equal: False
在上面的示例中,我们创建了 3 个名为 str1、str2 和 str3 的字符串。在这里,我们使用 Equals()
方法来检查一个字符串是否等于另一个字符串。
字符串对象的不可变性
在 C# 中,字符串是不可变的。这意味着,一旦我们创建了一个字符串,我们就不能更改该字符串。
为了理解这一点,请看一个例子
// create string
string str = "Hello ";
在这里,我们创建了一个名为 str 的字符串变量。该变量保存字符串 "Hello "
。
现在假设我们要更改字符串 str。
// add another string "World"
// to the previous string example
str = string.Concat(str, "World");
在这里,我们使用 Concat()
方法将字符串 "World" 添加到前面的字符串 str 中。
但是,当字符串不可变时,我们如何能够修改它呢?
让我们看看这里发生了什么:
- C# 获取字符串
"Hello "
的值。 - 通过将
"World"
添加到字符串"Hello "
来创建一个新字符串。 - 创建一个新的字符串对象,为其赋值
"Hello World"
,并将其存储在 str 中。 - 最初分配给 str 的字符串
"Hello "
由于没有其他变量引用它而被释放以进行垃圾回收。
字符串转义序列
转义字符用于转义字符串中的某些字符。换句话说,我们使用转义序列在字符串中插入特殊字符。
假设我们需要在字符串中包含双引号。
// include double quote
string str = "This is the "String" class";
由于字符串由双引号表示,编译器会将 "This is the "
视为字符串。上面的代码将导致错误。
为了解决这个问题,我们在 C# 中使用转义字符 \"
。例如:
// use the escape character
string str = "This is the \"String\" class.";
现在,通过在双引号 "
前面加上 \
,我们可以将其包含在字符串中。
C# 中的一些转义序列如下:
转义序列 | 字符名称 |
---|---|
\' |
单引号 |
\" |
双引号 |
\\ |
反斜杠 |
\0 |
空字符 |
\n |
换行符 |
\t |
水平制表符 |
字符串插值
在 C# 中,我们可以使用字符串插值将变量插入到字符串中。对于字符串插值,字符串文字必须以 $
字符开头。例如:
using System;
namespace CsharpString {
class Test {
public static void Main(string [] args) {
// create string
string name = "Programiz";
// string interpolation
string message = $"Welcome to {name}";
Console.WriteLine(message);
Console.ReadLine();
}
}
}
输出
Welcome to Programiz
在上面的示例中,我们在 message 字符串中使用 name 变量。
string message = $"Welcome to {name}";
请注意:
- 字符串文字以
$
开头 - name 变量放在花括号
{}
中
C# 字符串方法
C# 中有各种字符串方法。其中一些如下:
方法 | 描述 |
---|---|
Format() |
返回一个格式化字符串 |
Split() |
将字符串拆分成子字符串 |
Substring() |
返回字符串的子字符串 |
Compare() |
比较字符串对象 |
Replace() |
将指定的旧字符替换为指定的字符 |
Contains() |
检查字符串是否包含子字符串 |
Join() |
使用指定的 Separator 连接给定的字符串 |
Trim() |
删除任何前导和尾随的空格 |
EndsWith() |
检查字符串是否以给定的字符串结尾 |
IndexOf() |
返回字符串中指定字符的位置 |
Remove() |
从字符串中返回字符 |
ToUpper() |
将字符串转换为大写 |
ToLower() |
将字符串转换为小写 |
PadLeft() |
在左侧用空格或指定的 Unicode 字符填充字符串 |
PadRight() |
在右侧用空格或指定的 Unicode 字符填充字符串 |
StartsWith() |
检查字符串是否以给定的字符串开头 |
ToCharArray() |
将字符串转换为 char 数组 |
LastIndexOf() |
返回指定字符串最后一次出现的位置 |
常见问题
字符串数组的创建方式与数据类型数组的创建方式相同。例如:
using System;
namespace CsharpString {
class Test {
public static void Main(string [] args) {
// array of string type
string[] animals = {"Monkey", "Dog", "Cat"};
// print array elements
Console.WriteLine(animals[0]);
Console.WriteLine(animals[1]);
Console.WriteLine(animals[2]);
Console.ReadLine();
}
}
}
输出
Monkey Dog Cat
string
和 String
之间没有技术区别。在 C# 中,string 是 System.String
的别名。
建议使用 string
,因为它即使没有 using System;
也能工作。