C# 字符串(string)
本章节重点讲解 C# 字符串(string)。内容涵盖字符串的声明、常用操作、不可变性、性能优化(如 StringBuilder)、多语言处理、正则表达式匹配等方面,适合从初学到进阶使用。
一、什么是字符串(string)
- C# 中的
string是 System.String 类的别名,用于表示 Unicode 字符的序列。 - 字符串是 不可变(immutable) 的:创建后不能更改其内容。
二、字符串的声明与初始化
string s1 = "Hello World"; // 直接赋值
string s2 = new string('x', 5); // "xxxxx"
string s3 = string.Empty; // 空字符串 ""
三、字符串常见操作
| 操作方法 | 示例 | 说明 |
|---|---|---|
Length | s.Length | 获取字符数 |
ToUpper()/ToLower() | s.ToUpper() | 大/小写转换 |
Contains() | s.Contains("lo") | 是否包含子串 |
StartsWith() | s.StartsWith("He") | 是否以某字符串开头 |
EndsWith() | s.EndsWith("ld") | 是否以某字符串结尾 |
IndexOf() | s.IndexOf("l") | 查找索引位置 |
Substring() | s.Substring(6) | 从索引开始截取字符串 |
Replace() | s.Replace("World", "C#") | 替换字符串 |
Split() | s.Split(' ') | 按字符分割 |
Trim() | s.Trim() | 去除前后空白符 |
string.Join() | string.Join(",", arr) | 拼接数组元素为字符串 |
四、字符串不可变性
string original = "hello";
string modified = original.Replace("h", "j");
Console.WriteLine(original); // "hello"
Console.WriteLine(modified); // "jello"
✅ 原始字符串未被改变,而是创建了新字符串。
五、性能优化:使用 StringBuilder
StringBuilder 提供可变的字符串对象,适合拼接大量字符串场景(如循环)。
using System.Text;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++)
{
sb.Append("Hello ");
}
Console.WriteLine(sb.ToString()); // Hello Hello Hello Hello Hello
📘 官方文档:StringBuilder 类
六、字符串比较(区分大小写与忽略大小写)
string a = "Hello";
string b = "hello";
// 严格区分大小写
bool isEqual = a == b; // false
// 忽略大小写
bool isEqualIgnore = string.Equals(a, b, StringComparison.OrdinalIgnoreCase); // true
七、字符串格式化方式
1. 字符串插值(推荐)
string name = "Alice";
int age = 30;
string msg = $"Name: {name}, Age: {age}";
2. string.Format()
string msg = string.Format("Name: {0}, Age: {1}", name, age);
3. + 拼接(不推荐用于大量拼接)
string msg = "Name: " + name + ", Age: " + age;
八、正则表达式支持(Regex)
using System.Text.RegularExpressions;
string input = "Email: abc@example.com";
string pattern = @"\w+@\w+\.\w+";
Match match = Regex.Match(input, pattern);
if (match.Success)
{
Console.WriteLine("Email found: " + match.Value);
}
📘 正则官方文档:
.NET Regex 文档
九、多语言支持与 Unicode
C# 的字符串是基于 Unicode 的,支持中日韩文、Emoji 等字符。
string emoji = "你好 😊";
Console.WriteLine(emoji.Length); // 表示 Unicode 字符数(注意可能不同于视觉长度)
十、字符串与字符数组转换
// 字符串 → 字符数组
char[] chars = "Hello".ToCharArray();
// 字符数组 → 字符串
string str = new string(chars);
十一、字符串实用工具方法
| 方法 | 功能 |
|---|---|
string.IsNullOrEmpty(str) | 判断是否为 null 或空字符串 |
string.IsNullOrWhiteSpace() | 判断是否为 null、空或全空白 |
string.Compare() | 比较两个字符串 |
十二、官方参考文档
十三、最佳实践建议
| 建议 | 原因 |
|---|---|
| ✅ 使用字符串插值代替拼接 | 更安全、清晰 |
✅ 多次拼接用 StringBuilder | 避免大量中间字符串对象 |
❌ 避免使用 == 进行文化敏感比较 | 使用 string.Equals(..., StringComparison) 更准确 |
✅ 使用 IsNullOrWhiteSpace 检查用户输入 | 更健壮 |
| ✅ 正则表达式预编译(RegexOptions.Compiled)提高性能(如在循环中) |
更多详细内容,请关注其他相关文章!