字符串
大约 6 分钟
概述
在 C# 中,我们可以使用字符数组来表示字符串。但是更常用的是使用 string
关键字来声明字符串变量。string关键字是 System.String
类的别名,当我们使用该关键字时,实际上使用的是 .NET 框架中定义的System.String
类。
创建 String 对象的几种常见方式
方式一:直接赋值:
string str1 = "Hello, World!";
方式二: 使用 String 构造函数
string str2 = new String(new char[] {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!'});
方式三:字符串拼接
- 使用 + 号:
string str3 = str1 + str2;
- 使用
String.Concat
string str3 = string.Concat(str1, str2);
方式四:使用 StringBuilder:
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("Hello");
sb.Append(", ");
sb.Append("World");
sb.Append("!");
string str4 = sb.ToString();
方式五:使用 String.Format
string str5 = string.Format("{0}, {1}!", "Hello", "World");
方式六:使用插值字符串 (C# 6.0+)
string mystr = "World";
string str6 = $"Hello, {mystr}!";
插值字符串
插值字符串(Interpolated Strings)是 C# 6.0 引入的一种新的字符串格式化方法,允许在字符串文字中包含插入表达式。使用插值字符串可以使字符串的格式化更加直观和易于阅读。插值字符串以 $
符号开头,表达式被包含在 {}
中。插值字符串内的表达式会在运行时被计算和转换为字符串,性能上与使用 String.Format
相当。
String 的属性
String 类有两个重要属性:
Length
: 获取字符串的长度Chars[index]
: 获取字符串中指定位置的字符
示例代码如下:
string exampleString = "Example String";
// 获取字符串长度
int stringLength = exampleString.Length;
// 获取字符串中第7个字符(索引从0开始)
char seventhChar = exampleString[6];
Console.WriteLine($"字符串长度: {stringLength}");
Console.WriteLine($"第7个字符: {seventhChar}");
// 输出内容如下:
// 字符串长度: 14
// 第7个字符: e
String 的常见方法
比较方法
Compare(string strA, string strB)
:比较两个字符串的字符顺序,并返回一个整数表示它们的相对位置:
- 若
strA
大于strB
,则返回 1 - 若
strA
小于strB
,则返回 -1 - 若
strA
等于strB
,则返回 0
string str1 = "Hello";
string str2 = "World";
int result = String.Compare(str1, str2);
Console.WriteLine(result); // 输出:1
result = String.Compare(str2, str1);
Console.WriteLine(result); // 输出:-1
result = String.Compare(str1, str1);
Console.WriteLine(result); // 输出:0
Compare还可以再接受一个参数,即Compare(string strA, string strB, bool ignoreCase)
,此时支持忽略大小写比较:
- 若
ignoreCase
为 true,则比较时不区分大小写 - 若
ignoreCase
为 false,则比较时区分大小写
Equals(string value)
:此方法判断当前字符串是否与指定字符串相等,比较内容相同且大小写敏感:
- 若相等,则返回 true
- 若不相等,则返回 false
string str1 = "Hello";
string str2 = "Hello";
string str3 = "World";
bool isEqual = str1.Equals(str2);
Console.WriteLine(isEqual); // 输出:true
isEqual = str1.Equals(str3);
Console.WriteLine(isEqual); // 输出:false
也可以使用静态方法来比较:String.Equals(str1, str2)
。
连接方法
// 使用 Concat 方法连接两个字符串
string result1 = String.Concat("Hello, ", "world!");
Console.WriteLine(result1); // 输出: Hello, world!
// 使用 Join 方法连接字符串数组的所有元素,以逗号为分隔符
string[] array1 = { "apple", "banana", "cherry" };
string result4 = String.Join(", ", array1);
Console.WriteLine(result4); // 输出: apple, banana, cherry
// 使用 Join 方法连接字符串数组的指定元素,以逗号为分隔符
string[] array2 = { "dog", "cat", "bird", "fish" };
string result5 = String.Join(", ", array2, 1, 2);
Console.WriteLine(result5); // 输出: cat, bird
搜索方法
string sample = "Hello, world! Welcome to the world of C#.";
// 使用 Contains 方法检查字符串是否包含另一个字符串
bool containsWorld = sample.Contains("world");
Console.WriteLine($"Contains 'world': {containsWorld}");
// 输出: Contains 'world': True
// 使用 IndexOf 方法查找字符 'o' 第一次出现的位置
int indexOfO = sample.IndexOf('o');
Console.WriteLine($"Index of 'o': {indexOfO}");
// 输出: Index of 'o': 4
// 使用 IndexOf 方法查找字符串 "world" 第一次出现的位置
int indexOfWorld = sample.IndexOf("world");
Console.WriteLine($"Index of \"world\": {indexOfWorld}");
// 输出: Index of "world": 7
// 使用 IndexOfAny 方法查找字符数组中任一字符第一次出现的位置
int indexOfAny = sample.IndexOfAny(new char[] { 'w', 'W' });
Console.WriteLine($"Index of any 'w' or 'W': {indexOfAny}");
// 输出: Index of any 'w' or 'W': 7
// 使用 LastIndexOf 方法查找字符 'o' 最后一次出现的位置
int lastIndexOfO = sample.LastIndexOf('o');
Console.WriteLine($"Last index of 'o': {lastIndexOfO}");
// 输出: Last index of 'o': 35
// 使用 LastIndexOf 方法查找字符串 "world" 最后一次出现的位置
int lastIndexOfWorld = sample.LastIndexOf("world");
Console.WriteLine($"Last index of \"world\": {lastIndexOfWorld}");
// 输出: Last index of "world": 29
修改方法
方法 | 描述 |
---|---|
public static string Copy(string str) | 创建一个与指定字符串具有相同值的新的 String 对象。 |
public void CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count) | 从 string 对象的指定位置开始复制指定数量的字符到 Unicode 字符数组中的指定位置。 |
public string Insert(int startIndex, string value) | 返回一个新的字符串,其中,指定的字符串被插入在当前 string 对象的指定索引位置。 |
public string Remove(int startIndex) | 移除当前实例中的所有字符,从指定位置开始,一直到最后一个位置为止,并返回字符串。 |
public string Replace(char oldChar, char newChar) | 把当前 string 对象中,所有指定的 Unicode 字符替换为另一个指定的 Unicode 字符,并返回新的字符串。 |
public string[] Split(params char[] separator) | 返回一个字符串数组,包含当前的 string 对象中的子字符串,子字符串是使用指定的 Unicode 字符数组中的元素进行分隔的。 |
string original = "Hello, world!";
// 使用 CopyTo 方法复制字符到字符数组
char[] destination = new char[5];
original.CopyTo(7, destination, 0, 5);
Console.WriteLine($"Copied to array: {new string(destination)}"); // 输出: world
// 使用 Insert 方法插入字符串
string inserted = original.Insert(7, "beautiful ");
Console.WriteLine($"Inserted string: {inserted}"); // 输出: Hello, beautiful world!
// 使用 Remove 方法移除字符串中的一部分
string removed = original.Remove(5);
Console.WriteLine($"Removed part: {removed}"); // 输出: Hello
// 使用 Replace 方法替换字符
string replaced = original.Replace('l', 'x');
Console.WriteLine($"Replaced characters: {replaced}"); // 输出: Hexxo, worxd!
// 使用 Split 方法分割字符串
string[] split = original.Split(new char[] { ' ', '!' });
Console.WriteLine($"Split parts: {string.Join(", ", split)}"); // 输出: Hello,, world
格式化方法
方法 | 描述 |
---|---|
public static string Format(string format, Object arg0) | 把指定字符串中一个或多个格式项替换为指定对象的字符串表示形式。 |
// 使用 Format 方法替换格式项
string name = "John";
int age = 30;
string formattedString = String.Format("Name: {0}, Age: {1}", name, age);
Console.WriteLine(formattedString); // 输出: Name: John, Age: 30
其他方法
方法 | 描述 |
---|---|
public bool EndsWith(string value) | 判断 string 对象的结尾是否匹配指定的字符串。 |
public static bool IsNullOrEmpty(string value) | 指示指定的字符串是否为 null 或者是否为一个空的字符串。 |
public bool StartsWith(string value) | 判断字符串实例的开头是否匹配指定的字符串。 |
public char[] ToCharArray() | 返回一个带有当前 string 对象中所有字符的 Unicode 字符数组。 |
public string ToLower() | 把字符串转换为小写并返回。 |
public string ToUpper() | 把字符串转换为大写并返回。 |
public string Trim() | 移除当前 String 对象中的所有前导空白字符和后置空白字符。 |
string sample = " Hello, World! ";
// 使用 EndsWith 方法判断字符串结尾
bool endsWith = sample.EndsWith("World!");
Console.WriteLine($"Ends with 'World!': {endsWith}"); // 输出: Ends with 'World!': True
// 使用 IsNullOrEmpty 方法检查字符串是否为空或null
bool isNullOrEmpty = String.IsNullOrEmpty(sample);
Console.WriteLine($"Is null or empty: {isNullOrEmpty}"); // 输出: Is null or empty: False
// 使用 StartsWith 方法判断字符串开头
bool startsWith = sample.StartsWith(" Hello");
Console.WriteLine($"Starts with ' Hello': {startsWith}"); // 输出: Starts with ' Hello': True
// 使用 ToCharArray 方法获取字符数组
char[] charArray = sample.ToCharArray();
Console.WriteLine($"Character array: {new string(charArray)}"); // 输出: Character array: Hello, World!
// 使用 ToLower 方法转换为小写
string toLower = sample.ToLower();
Console.WriteLine($"To lower: {toLower}"); // 输出: To lower: hello, world!
// 使用 ToUpper 方法转换为大写
string toUpper = sample.ToUpper();
Console.WriteLine($"To upper: {toUpper}"); // 输出: To upper: HELLO, WORLD!
// 使用 Trim 方法移除前后空格
string trimmed = sample.Trim();
Console.WriteLine($"Trimmed: '{trimmed}'"); // 输出: Trimmed: 'Hello, World!'