C# 字符串处理 (String Processing)
在 C# 中,`string` 是一个引用类型,但它具有不可变性 (Immutability)。这意味着一旦创建了字符串对象,就不能修改它的值。所有看似修改字符串的方法(如 `Replace`, `Substring`)实际上都是返回了一个新的字符串对象。
1. 基础属性与定义
1.1 定义与长度
使用 `Length` 属性获取字符串中字符的个数。
// 定义字符串 string k = "scdmckl"; // 获取长度 int num = k.Length; // num 的值为 7
1.2 换行符
在 Windows 系统中,标准的换行符是 `\r\n` (回车 + 换行)。 * 扩展知识:为了跨平台兼容性,建议使用 `Environment.NewLine`。
string str = "第一行" + "\r\n" + "第二行"; // 或者 string str2 = "第一行" + Environment.NewLine + "第二行";
2. 字符串截取 (Substring)
`Substring` 是最常用的字符串截取方法,它有两个主要的重载版本。
| 方法 | 语法 | 说明 |
|---|---|---|
| 截取指定长度 | `Substring(int startIndex, int length)` | 从 `startIndex` 开始,截取 `length` 个字符。 |
| 截取到末尾 | `Substring(int startIndex)` | 从 `startIndex` 开始,一直截取到字符串末尾。 |
2.1 取字符串的前 n 个字符
string str1 = "sacfvd"; // 从索引 0 开始,取 3 个字符 string str2 = str1.Substring(0, 3); // 结果: "sac"
2.2 去掉字符串的前 n 个字符
这里有两种思路:使用 `Remove` 或者使用 `Substring`(取剩余部分)。
string str1 = "sacfvd"; // 方法 1: 使用 Remove(startIndex, count) // 从索引 0 开始,移除 3 个字符 string res1 = str1.Remove(0, 3); // 结果: "fvd" // 方法 2: 使用 Substring(startIndex) // 从索引 3 开始截取直到末尾(相当于跳过了前 3 个) string res2 = str1.Substring(3); // 结果: "fvd" // ! 注意:原笔记中 str1.Substring(0, 3) 的结果是 "sac",并非去掉前 n 个,而是保留前 n 个。
2.3 截取中间部分 (去头去尾)
场景:去除前 2 个字符,保留随后的 5 个字符。
string str1 = "mabcdefg"; // 从索引 2 ('b') 开始,截取 5 个字符 string str2 = str1.Substring(2, 5); // 结果: "bcdef" // WinForms 示例应用 // textBox8.Text = textBox7.Text.Substring(2, 5);
2.4 截取最后一个字符
利用 `Length` 属性计算最后一个字符的索引。
string str1 = "mabcd"; // 索引 = 总长度 - 1 string lastChar = str1.Substring(str1.Length - 1, 1); // 结果: "d"
3. 字符串修改与替换
由于字符串的不可变性,必须将修改后的结果赋值给变量。
3.1 替换内容 (Replace)
将字符串中指定的子串替换为新内容。
string str1 = "mabcd"; // 将 "abc" 替换为 "DEF" string str2 = str1.Replace("abc", "DEF"); // 结果: "mDEFd"
4. 字符访问与数组转换
4.1 读取单个字符 (索引器)
可以将字符串视为字符的只读数组,通过索引 `[]` 访问。
string text = "Hello"; // 获取索引为 1 的字符 char c = text[1]; // 结果: 'e' (注意类型是 char,不是 string) // WinForms 示例应用 /* string a = textBox12.Text; int index = Convert.ToInt32(读取索引号.Text); char b = a[index]; textBox13.Text = b.ToString(); // char 转 string 显示 */
4.2 字符串转字符数组
如果需要修改字符串中的特定字符,通常先转为数组,修改后再转回字符串。
string str = "abcdef"; // 转换为 char 数组 char[] chars = str.ToCharArray(); // chars[0] = 'a', chars[1] = 'b'...
5. 字符串分割 (Split)
`Split` 方法用于根据分隔符将字符串拆分为字符串数组。
5.1 基础分割与去除空项
场景:获取特定字符前的部分,或者分割数据。
string data = "value1,value2,,value3"; // 简单分割 string[] parts = data.Split(','); // 高级分割:去除空条目 (StringSplitOptions.RemoveEmptyEntries) // 示例:去除字符 'a' 前的一段(实际逻辑取决于数据结构,这里演示 Split 取第一项) string input = "123a456"; string[] result = input.Split(new char[] { 'a' }, StringSplitOptions.RemoveEmptyEntries); // 获取分割后的第一部分 string firstPart = result[0]; // 结果: "123"
6. 字符串比较
6.1 判断相等
比较两个字符串的内容是否相同。
string k = "sc"; string L = "sc"; // 方法 1: 使用 Equals 方法 bool isSame = k.Equals(L); // true // 方法 2: 使用 == 运算符 (C# 中 string 重载了 ==) bool isSame2 = (k == L); // true // 扩展:忽略大小写比较 bool isSameIgnoreCase = k.Equals("SC", StringComparison.OrdinalIgnoreCase);