public string PadLeft(int totalWidth, char paddingChar = ' ');
public string PadRight(int totalWidth, char paddingChar = ' ');
totalWidth:結果字串總長度,若原字串長度 ≥ totalWidth 則回傳原字串不變。paddingChar:填充字元,預設空白鍵。string s = "42";
s.PadLeft(6) // " 42" (左邊補空白,右對齊)
s.PadLeft(6, '0') // "000042" (左邊補零)
s.PadRight(6, '0') // "420000" (右邊補零)
s.PadLeft(6, '*') // "****42" (自訂填充字元)
int id = 7;
string code = id.ToString().PadLeft(6, '0'); // "000007"
foreach (var i in new[] { 1, 23, 456, 7890 })
Console.WriteLine($"EMP{i.ToString().PadLeft(5, '0')}");
// EMP00001
// EMP00023
// EMP00456
// EMP07890
var items = new[]
{
new { Name = "Apple", Price = 30 },
new { Name = "Banana", Price = 15 },
new { Name = "Cherry", Price = 45 }
};
foreach (var item in items)
{
// 名稱左對齊 10 字元,價格右對齊 8 字元補零
Console.WriteLine($"{item.Name.PadRight(10)}{item.Price.ToString().PadLeft(8, '0')}");
}
// Apple 00000030
// Banana 00000015
// Cherry 00000045
var now = DateTime.Now;
string fileName = $"{now.Year}{now.Month.ToString().PadLeft(2,'0')}{now.Day.ToString().PadLeft(2,'0')}_" +
$"{now.Hour.ToString().PadLeft(2,'0')}{now.Minute.ToString().PadLeft(2,'0')}{now.Second.ToString().PadLeft(2,'0')}.log";
// 20240315_143045.log
// 更簡潔寫法:
string fileName2 = now.ToString("yyyyMMdd_HHmmss") + ".log";
string title = "SYSTEM STATUS";
int width = 40;
int leftPad = (width - title.Length) / 2 + title.Length;
string centered = title.PadLeft(leftPad).PadRight(width);
// " SYSTEM STATUS "
PadLeft/PadRight 會配置新字串,高頻呼叫 (如每秒萬次) 可考慮 StringBuilder 或 string.Format / FormattableString。num.ToString("D6") 相當於 num.ToString().PadLeft(6,'0') 但更語意化且效能略優。| 錯誤寫法 | 問題 | 正確寫法 |
|---|---|---|
s.PadLeft(2, "0") | 第二參數需 char,非 string | s.PadLeft(2, '0') |
| 期望原字串被修改 | 字串不可變,方法回傳新字串 | s = s.PadLeft(6, '0') |
| totalWidth 小於字串長度 | 直接回傳原字串,不截斷 | 需先 s.Substring(0, width) 再 Pad |
原文連結:https://www.bianceng.cn/Programming/csharp/201410/45590.htm