首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 字符串處理完全指南:核心方法、StringBuilder、正則與格式化實戰

     編輯:關於C語言

字符串本質:不可變的引用類型

string(System.String)是 不可變 的引用類型。每次「修改」實際都會在托管堆上分配新物件,舊物件等待 GC 回收。高頻拼接場景必須使用 StringBuilder。

一、聲明與初始化

// 字面量(推薦)
string s1 = "Hello";
string s2 = @"C:\Path\To\File";      // 逐字字面量,不轉義
string s3 = $"{DateTime.Now:yyyy-MM-dd}"; // 字串插值

// 建構函式
char[] chars = { 'H', 'e', 'l', 'l', 'o' };
string s4 = new string(chars);
string s5 = new string('*', 10);    // 重複字符

二、核心實例方法速查表

方法用途回傳備註
CompareTo(str)序數比較int (-1/0/1)區分大小寫;序數比較非文化敏感
Equals(str, StringComparison)相等判斷bool推薦用 OrdinalIgnoreCase
IndexOf/LastIndexOf查找位置int支援 StringComparison 參數
StartsWith/EndsWith前綴/後綴bool同上
Substring(start, len?)截取子串string超出範圍拋異常
Split(separator, options)分割string[]RemoveEmptyEntries 常用
Join(sep, arr)連接陣列string靜態方法
Trim/TrimStart/TrimEnd移除空白string可傳入字符陣列自定義
ToUpper/ToLower大小寫轉換string指定 CultureInfo 避免土耳其語問題
Replace(old, new)替換string全域替換,不可變
ToCharArray()轉字符陣列char[]可修改後重建字串

三、StringBuilder:高效構建字串

var sb = new StringBuilder("初始", 100); // 預分配容量
sb.Append("內容");
sb.AppendFormat("格式化 {0:N2}", 1234.5);
sb.Insert(0, "前綴_");
sb.Remove(5, 3);
sb.Replace('舊', '新');
string result = sb.ToString(); // 單次分配

效能基準: 循環 10 萬次拼接,StringBuilder 約快 1000 倍且零 Gen2 GC。

四、正則表達式進階應用

using System.Text.RegularExpressions;

var pattern = @"^\d{4}-\d{2}-\d{2}$"; // 日期格式
var input = "2024-01-15";

// 1. 單次匹配
bool valid = Regex.IsMatch(input, pattern);

// 2. 提取分組
var match = Regex.Match(input, @"(\d{4})-(\d{2})");
if (match.Success) {
    var year = match.Groups[1].Value;
    var month = match.Groups[2].Value;
}

// 3. 替換
string masked = Regex.Replace("身份證 A123456789", @"\w\d{9}", "***隱藏***");

// 4. 分割(支援正則分隔符)
string[] parts = Regex.Split("a,b;c|d", @"[,;|]");

// 編譯選項:RegexOptions.Compiled 提升重複使用效能
var regex = new Regex(pattern, RegexOptions.Compiled);

五、格式化輸出與解析

標準數值格式字串

格式說明範例 (1234.56)
C / c貨幣¥1,234.56
D / d十進制整數1235 (四捨五入)
E / e科學記號1.234560E+003
F / f固定小數位1234.56
N / n千分位1,234.56
P / p百分比123,456.00%
X / x十六進制4D2

自訂日期時間格式

DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); // 2024-01-15 14:30:45.123
DateTime.Now.ToString("yyyy年M月d日 dddd", new CultureInfo("zh-TW")); // 2024年1月15日 星期一

字串插值(C# 6+ 推薦)

var name = "張三";
var score = 98.5;
var msg = $"學生 {name} 得分 {score:N1} 分,等級 {(score >= 90 ? "優" : "良")}";

六、控制台 I/O 實用片段

// 輸出
Console.WriteLine("帶換行");
Console.Write("不換行");

// 格式化輸出
Console.WriteLine("姓名:{0,-10} 年齡:{1,3}", "李四", 25);

// 輸入
Console.Write("請輸入姓名:");
string input = Console.ReadLine()?.Trim() ?? "";

// 安全解析數值
if (int.TryParse(Console.ReadLine(), out int age)) { ... }

七、實戰案例:IP 地址處理

string ip = "192.168.1.100";
// 分割
var segments = ip.Split('.');
// 驗證
bool valid = segments.Length == 4 && segments.All(s => byte.TryParse(s, out _));
// 重組
string dotted = string.Join(".", segments);
string spaced = string.Join(" ", segments); // 192 168 1 100

八、避坑指南

  • 字串比較:預設區分大小寫,跨文化比較務必指定 StringComparison.OrdinalIgnoreCase。
  • null 檢查:使用 string.IsNullOrEmpty() / IsNullOrWhiteSpace()。
  • 效能陷阱:循環中用 + 拼接 → 改 StringBuilder 或 string.Concat。
  • 編碼問題:跨系統交互明確指定 Encoding.UTF8,避免預設編碼差異。

結語

熟練掌握 string 不可變特性、StringBuilder 高效構建、正則強大匹配、格式化靈活輸出,是 C# 開發者處理文本數據的核心功力。選對工具,事半功倍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved