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
性能考量[编辑 | 编辑源代码]
字符串不可变性导致频繁修改时性能下降。比较不同方法的性能差异:
数学公式表示内存消耗增长:(直接连接) vs (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. 避免在热路径中频繁分配字符串