1. String 类概述
String 类是 C# 中用于处理文本数据的最重要类之一。它是不可变的引用类型,这意味着一旦创建,字符串的内容就不能被修改。
重要特性
- 不可变性:字符串一旦创建就不能修改
- 引用类型:存储在堆内存中
- Unicode 编码:支持多语言字符
- 字符串池:相同的字符串字面量共享内存
2. 常用属性
Length - 获取字符串长度
描述:返回字符串中字符的数量
类型:int(只读)
示例:
string text = "Hello World";
int length = text.Length; // 返回 11
Console.WriteLine($"字符串长度: {length}");
Empty - 空字符串
描述:表示空字符串的静态字段
类型:string(静态)
示例:
string emptyString = string.Empty;
if (emptyString == "")
{
Console.WriteLine("这是空字符串");
}
3. 字符串创建和初始化方法
string.Concat() - 连接字符串
功能:将多个字符串连接成一个新字符串
示例:
string firstName = "张";
string lastName = "三";
string fullName = string.Concat(firstName, lastName);
Console.WriteLine(fullName); // 输出:张三
string.Format() - 格式化字符串
功能:将指定的字符串中的一个或多个格式项替换为相应对象的字符串表示形式
示例:
string name = "李四";
int age = 25;
string message = string.Format("姓名: {0}, 年龄: {1}", name, age);
Console.WriteLine(message); // 输出:姓名: 李四, 年龄: 25
string.Join() - 连接字符串数组
功能:使用指定的分隔符连接字符串数组的所有元素
示例:
string[] fruits = {"苹果", "香蕉", "橙子"};
string result = string.Join(", ", fruits);
Console.WriteLine(result); // 输出:苹果, 香蕉, 橙子
4. 字符串比较方法
Equals() - 比较字符串内容
功能:确定此字符串是否与指定的字符串具有相同的值
示例:
string str1 = "hello";
string str2 = "HELLO";
bool result1 = str1.Equals(str2); // false
bool result2 = str1.Equals(str2, StringComparison.OrdinalIgnoreCase); // true
Compare() - 比较字符串顺序
功能:比较两个指定的字符串对象,并返回一个指示它们在排序顺序中的相对位置的整数
示例:
string str1 = "apple";
string str2 = "banana";
int result = string.Compare(str1, str2);
Console.WriteLine(result); // 输出:-1(str1 在 str2 之前)
StartsWith() - 检查前缀
功能:确定此字符串实例的开头是否与指定的字符串匹配
示例:
string text = "Hello World";
bool startsWithHello = text.StartsWith("Hello"); // true
bool startsWithWorld = text.StartsWith("World"); // false
EndsWith() - 检查后缀
功能:确定此字符串实例的结尾是否与指定的字符串匹配
示例:
string text = "Hello World";
bool endsWithWorld = text.EndsWith("World"); // true
bool endsWithHello = text.EndsWith("Hello"); // false
5. 字符串搜索方法
IndexOf() - 查找字符或子串
功能:报告指定字符串在此实例中的第一个匹配项的从零开始的索引
示例:
string text = "Hello World";
int index1 = text.IndexOf('o'); // 4
int index2 = text.IndexOf("World"); // 6
int index3 = text.IndexOf('z'); // -1(未找到)
LastIndexOf() - 从后向前查找
功能:报告指定字符串在此实例中的最后一个匹配项的从零开始的索引
示例:
string text = "Hello World";
int lastIndex = text.LastIndexOf('o'); // 7
Contains() - 检查是否包含子串
功能:返回一个值,该值指示指定的子串是否出现在此字符串中
示例:
string text = "Hello World";
bool containsHello = text.Contains("Hello"); // true
bool containsPython = text.Contains("Python"); // false
6. 字符串修改方法
Substring() - 提取子字符串
功能:从此实例检索子字符串。子字符串从指定的字符位置开始且具有指定的长度
示例:
string text = "Hello World";
string sub1 = text.Substring(6); // "World"
string sub2 = text.Substring(0, 5); // "Hello"
Replace() - 替换字符或子串
功能:返回一个新字符串,其中当前实例中出现的所有指定字符串都替换为另一个指定的字符串
示例:
string text = "Hello World";
string newText = text.Replace("World", "C#");
Console.WriteLine(newText); // 输出:Hello C#
ToUpper() / ToLower() - 大小写转换
功能:返回此字符串转换为大写或小写形式的副本
示例:
string text = "Hello World";
string upper = text.ToUpper(); // "HELLO WORLD"
string lower = text.ToLower(); // "hello world"
Trim() - 去除空白字符
功能:从当前字符串移除所有前导空白字符和尾部空白字符
示例:
string text = " Hello World ";
string trimmed = text.Trim(); // "Hello World"
Split() - 分割字符串
功能:返回一个字符串数组,该数组包含此实例中的子字符串(由指定字符数组的元素分隔)
示例:
string text = "apple,banana,orange";
string[] fruits = text.Split(',');
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
// 输出:
// apple
// banana
// orange
7. 字符串转换方法
Parse() - 字符串转换为数值
功能:将数字的字符串表示形式转换为它的等效整数
示例:
string numberStr = "123";
int number = int.Parse(numberStr);
Console.WriteLine(number + 1); // 输出:124
ToString() - 转换为字符串
功能:返回此实例的字符串表示形式
示例:
int number = 123;
string str = number.ToString(); // "123"
DateTime now = DateTime.Now;
string dateStr = now.ToString("yyyy-MM-dd"); // "2024-01-15"
8. 字符串格式化方法
string interpolation - 字符串插值
功能:C# 6.0 引入的字符串插值功能,提供更简洁的字符串格式化方式
示例:
string name = "王五";
int age = 30;
string message = $"姓名: {name}, 年龄: {age}";
Console.WriteLine(message); // 输出:姓名: 王五, 年龄: 30
9. 性能优化建议
避免字符串连接的性能问题
由于字符串的不可变性,频繁的字符串连接操作会产生大量临时对象,影响性能。
不推荐的做法:
string result = "";
for (int i = 0; i < 1000; i++)
{
result += i.ToString(); // 每次连接都创建新字符串
}
推荐的做法:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++)
{
sb.Append(i.ToString());
}
string result = sb.ToString();
使用 StringBuilder 的场景
- 需要频繁修改字符串内容时
- 循环中进行字符串连接时
- 构建大型字符串时
- 需要高性能字符串操作时
10. 实用示例
示例1:验证电子邮件格式
bool IsValidEmail(string email)
{
if (string.IsNullOrEmpty(email))
return false;
return email.Contains("@") &&
email.IndexOf('@') > 0 &&
email.LastIndexOf('.') > email.IndexOf('@') + 1;
}
示例2:提取文件名和扩展名
string filePath = @"C:\Users\Documents\report.pdf";
string fileName = Path.GetFileNameWithoutExtension(filePath);
string extension = Path.GetExtension(filePath);
Console.WriteLine($"文件名: {fileName}, 扩展名: {extension}");
示例3:统计单词数量
int CountWords(string text)
{
if (string.IsNullOrWhiteSpace(text))
return 0;
string[] words = text.Split(new char[] { ' ', '.', ',', '!', '?' },
StringSplitOptions.RemoveEmptyEntries);
return words.Length;
}
11. 总结
通过本教程,您应该已经掌握了 C# String 类的核心属性和方法:
- 理解了字符串的不可变性和引用类型特性
- 掌握了字符串的创建、比较、搜索和修改方法
- 学会了字符串格式化和高性能操作技巧
- 了解了实际应用中的最佳实践
字符串操作是编程中最常见的任务之一,熟练掌握 String 类的方法将大大提高您的开发效率。