跳转到内容

C Sharp 字符串修改

来自代码酷

C#字符串修改[编辑 | 编辑源代码]

介绍[编辑 | 编辑源代码]

在C#中,字符串(String)是不可变(immutable)的序列字符,这意味着一旦创建就不能更改。任何看似"修改"字符串的操作实际上都会创建一个新的字符串对象。理解这一点对高效处理文本数据至关重要。本指南将详细介绍C#中字符串修改的各种方法、性能考量及最佳实践。

基本字符串操作[编辑 | 编辑源代码]

字符串连接[编辑 | 编辑源代码]

使用+运算符或String.Concat方法连接字符串:

string firstName = "John";
string lastName = "Doe";
string fullName = firstName + " " + lastName;  // 方法1
string fullName2 = String.Concat(firstName, " ", lastName);  // 方法2

Console.WriteLine(fullName);  // 输出: John Doe
Console.WriteLine(fullName2); // 输出: John Doe

字符串插值[编辑 | 编辑源代码]

C# 6.0引入的字符串插值更简洁:

int age = 30;
string message = $"{firstName} {lastName} is {age} years old.";
Console.WriteLine(message);  // 输出: John Doe is 30 years old.

常用修改方法[编辑 | 编辑源代码]

Substring - 提取子串[编辑 | 编辑源代码]

string original = "Hello World";
string sub = original.Substring(6, 5); // 从索引6开始取5个字符
Console.WriteLine(sub);  // 输出: World

Replace - 替换内容[编辑 | 编辑源代码]

string text = "I like apples";
string newText = text.Replace("apples", "oranges");
Console.WriteLine(newText);  // 输出: I like oranges

ToUpper/ToLower - 大小写转换[编辑 | 编辑源代码]

string mixedCase = "MiXeD CaSe";
Console.WriteLine(mixedCase.ToUpper());  // 输出: MIXED CASE
Console.WriteLine(mixedCase.ToLower());  // 输出: mixed case

Trim - 去除空白[编辑 | 编辑源代码]

string padded = "   text   ";
Console.WriteLine($"'{padded.Trim()}'");      // 输出: 'text'
Console.WriteLine($"'{padded.TrimStart()}'"); // 输出: 'text   '
Console.WriteLine($"'{padded.TrimEnd()}'");   // 输出: '   text'

高级字符串处理[编辑 | 编辑源代码]

StringBuilder 类[编辑 | 编辑源代码]

对于频繁修改字符串的场景,应使用StringBuilder避免创建多个临时对象:

using System.Text;

StringBuilder sb = new StringBuilder();
sb.Append("Hello");
sb.Append(" ");
sb.Append("World");
sb.AppendLine("!");
sb.AppendFormat("Current time: {0}", DateTime.Now);

string result = sb.ToString();
Console.WriteLine(result);
/* 输出:
Hello World!
Current time: [当前时间]
*/

字符串分割与合并[编辑 | 编辑源代码]

string names = "John,Mary,Robert";
string[] nameArray = names.Split(',');  // 分割
string joined = String.Join("; ", nameArray);  // 合并
Console.WriteLine(joined);  // 输出: John; Mary; Robert

性能考量[编辑 | 编辑源代码]

字符串不可变性导致频繁修改时性能下降。比较不同方法的性能差异:

gantt title 字符串操作性能比较(操作10000次) dateFormat X axisFormat %s section 直接连接 操作 : 0, 5000 section StringBuilder 操作 : 0, 100 section String.Concat 操作 : 0, 2000

数学公式表示内存消耗增长:O(n2)(直接连接) vs O(n)(StringBuilder)

实际应用案例[编辑 | 编辑源代码]

用户输入处理[编辑 | 编辑源代码]

string userInput = "  UsERnAmE  ";
string processed = userInput.Trim().ToLower();
Console.WriteLine(processed);  // 输出: username

动态SQL查询构建[编辑 | 编辑源代码]

StringBuilder sql = new StringBuilder();
sql.Append("SELECT * FROM Users WHERE ");
sql.AppendFormat("Name = '{0}' AND ", name);
sql.AppendFormat("Age > {0}", minAge);
// 比直接连接更安全高效

最佳实践[编辑 | 编辑源代码]

1. 少量修改使用字符串方法 2. 大量或循环中修改使用StringBuilder 3. 注意文化敏感性(使用CultureInfo参数) 4. 避免在热路径中频繁分配字符串

参见[编辑 | 编辑源代码]