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

C# 字串操作核心技巧與避坑指南(一):型別轉換、分割、逐字字串與四捨五入

     編輯:關於C#

1. Convert.ToInt32 vs Int32.Parse vs Int32.TryParse 深度解析

三者皆可將字串轉為 int,但錯誤處理行為截然不同:

方法輸入 null輸入非數字回傳值適用場景
Convert.ToInt32(str) 回傳 0 拋 FormatException int 允許 null 轉 0 的業務邏輯
Int32.Parse(str) 拋 ArgumentNullException 拋 FormatException int .NET 1.1 時代遺留,確定輸入合法時使用
Int32.TryParse(str, out int) 回傳 false,out=0 回傳 false,out=0 bool 現代首選,無例外、效能最佳、程式碼清晰

效能真相

實測百萬次迴圈下,三者差異極微(奈秒級)。TryParse 略勝一籌,因內部直接呼叫 Number.TryParseInt32,少一層委派呼叫。

// 推薦寫法
if (Int32.TryParse(userInput, out int value))
{
    // 成功
}
else
{
    // 失敗處理
}

2. String.Split 三種進階用法


string data = "1234,234523,4324,324";

// 用法一:分隔字元陣列 (可多字元分隔)
string[] parts1 = data.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

// 用法二:單一分隔字元 (最常用)
string[] parts2 = data.Split(',');

// 用法三:Regex.Split 依正則分割 (支援多字元、模式分隔)
string[] parts3 = System.Text.RegularExpressions.Regex.Split(data, @",\s*");

實用技巧:分割後過濾空白


var cleanParts = data.Split(',')
                     .Select(s => s.Trim())
                     .Where(s => !string.IsNullOrEmpty(s))
                     .ToArray();

3. @逐字字串字面值 vs 一般字串

特性一般字串 "..."逐字字串 @"..."
逸出字元需雙重逸出 \\ \n忽略逸出,原樣輸出
跨行需用 \n 或 + 串接可直接換行撰寫
路徑表示"C:\\Windows\\System"@"C:\Windows\System"
雙引號內嵌"He said \"Hi\""@"He said ""Hi""" (雙寫雙引號)

4. 保留兩位小數與四捨五入


double value = 12.345678;

// 方法一:Math.Round (銀行家算法:四捨六入五成雙)
double r1 = Math.Round(value, 2); // 12.35
double r2 = Math.Round(12.345, 2, MidpointRounding.AwayFromZero); // 12.35 (傳統四捨五入)

// 方法二:ToString 格式化 (僅顯示用)
string s1 = value.ToString("F2"); // "12.35"
string s2 = value.ToString("N2"); // "12.35" (含千分位)

// 方法三:手動運算 (不推薦,易溢位)
double r3 = Math.Floor(value * 100 + 0.5) / 100;
金融計算警示:涉及金額計算請使用 decimal 型別搭配 Math.Round(value, 2, MidpointRounding.AwayFromZero),避免二進位浮點誤差。

5-10. 快速參考表

  • URL 中文傳遞:參考「進階篇」第 1 節,統一 UTF-8 + UrlEncode/Decode。
  • 數字格式化:ToString("##-###-####") 或 Regex 替換。
  • 字元交換:首選 ToCharArray 陣列交換。
  • 隨機個位數:rnd.Next(10) 比 % 10 更直觀。
  • 重複字串:new string('A', 21)。
  • 字串比較:string.Compare(a, b, StringComparison.OrdinalIgnoreCase)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved