.NET 中 string(System.String)為不可變參考類型,每次修改(連接、替換、Substring)都會建立新物件。宣告方式:
string s1 = "Hello";
string s2 = null;
string s3 = s1; // 參考同一物件
string.Formatstring fmt = string.Format("Value: {0:C}, Date: {1:yyyy-MM-dd}", 1234.5, DateTime.Now);
// Value: $1,234.50, Date: 2024-01-15
格式項語法:{index[,alignment][:formatString]}
| 指定符 | 說明 | 範例 |
|---|---|---|
| d | 短日期 | 2024/1/15 |
| D | 長日期 | 2024年1月15日 |
| t | 短時間 | 14:30 |
| T | 長時間 | 14:30:05 |
| yyyy/MM/dd HH:mm:ss | 自訂 | 2024/01/15 14:30:05 |
double d = 1234.5;
string.Format("{0:#,##0.00}", d); // 1,234.50
string.Format("{0:0.00%}", 0.234); // 23.40%
string.Format("{0:$#,##0.00;($#,##0.00);Zero}", -56.78); // ($56.78)
分號分隔:正數格式;負數格式;零值格式
| 方法 | 說明 |
|---|---|
Length | 字元數 |
IndexOf/LastIndexOf | 尋找子字串/字元位置 |
Substring(start, len) | 擷取子字串 |
Split(separator) | 分割為陣列 |
Replace(old, new) | 取代 |
Trim/TrimStart/TrimEnd | 移除首尾空白或指定字元 |
ToUpper/ToLower | 大小寫轉換 |
StartsWith/EndsWith | 前綴/後綴判斷 |
Contains | 是否包含子字串 |
Equals / == | 序數比較(區分大小寫) |
CompareTo / String.Compare | 支援文化特性、忽略大小寫 |
string s = " Mary Had a Little Lamb ";
Console.WriteLine(s.Trim()); // "Mary Had a Little Lamb"
Console.WriteLine(s.Split(' ')[3]); // "Little"
Console.WriteLine(s.ToLower()); // " mary had a little lamb "
適用於大量連接、迴圈累加場景,避免產生大量暫時字串物件。
var sb = new StringBuilder();
sb.Append("Greetings!\n");
sb.AppendFormat("Price: {0:C}", 129.99);
sb.AppendLine("Big concatenated string.");
Console.WriteLine(sb.ToString());
關鍵方法:Append、AppendLine、AppendFormat、Insert、Remove、Replace、Clear、ToString()
System.Text.RegularExpressionsRegex.IsMatchstring emailPattern = @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$";
bool valid = Regex.IsMatch("test@example.com", emailPattern); // true
Match/Matchesstring urlPattern = @"^(?\w+)://[^/]+?(?:\d+)?/";
var url = "https://server.com:2100/home.aspx";
var m = Regex.Match(url, urlPattern);
if (m.Success) {
Console.WriteLine(m.Groups["proto"].Value); // http
Console.WriteLine(m.Groups["port"].Value); // :2100
}
Regex.Replacestring input = "Order 123, Order 456";
string result = Regex.Replace(input, @"\d+", "###"); // "Order ###, Order ###"
IgnoreCase:忽略大小寫Compiled:編譯為 IL,重複使用提升效能Singleline:. 包含換行Multiline:^/$ 匹配行首尾StringBuilderstring.Format 或插值字串 $"..." (C# 6+)