目录

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);