文字列の「パディング(桁揃え)」とは
C#でコンソール出力やテキストファイル、レポートなどを作成する際、数値を文字列に変換しただけでは、"ID: 1"、"ID: 150"、"ID: 99"のように、文字列の長さがバラバラになってしまい、見た目が揃わず読みにくくなります。
// 整形前
Total: 1,500
Tax: 80
GrandTotal: 1,580
これを以下のように、全体の桁数を固定して「右寄せ」または「左寄せ」に揃える処理を「パディング(Padding)」と呼びます。
// 整形後 (右寄せ)
Total: 1,500
Tax: 80
GrandTotal: 1,580
stringクラスは、このパディング処理のためにPadLeftメソッドとPadRightメソッドを提供しています。
PadLeft(int totalWidth):右寄せ(先頭に空白を埋める)
PadLeftメソッドは、文字列の合計の長さが totalWidth(総桁数)になるまで、先頭(左側)に空白文字(スペース)を挿入した新しい文字列を返します。
- 元の文字列の長さが
totalWidth以上の場合、何も変更されません(切り捨てられたりはしません)。 - 結果として、文字列は指定された幅の中で「右寄せ」されます。
PadLeft のコード例
ID番号の桁数が異なっていても、PadLeft(10)を使用することで、すべての文字列を10桁の幅に揃え、右寄せにすることができます。
using System;
public class PadLeftExample
{
public static void Main()
{
string id1 = "101";
string id2 = "9987";
string id3 = "5";
int totalWidth = 10; // 全体の幅を10桁に固定
Console.WriteLine("--- 右寄せ (PadLeft) ---");
Console.WriteLine("0123456789"); // 桁数の目安
// 10桁になるまで左側に空白が挿入される
Console.WriteLine(id1.PadLeft(totalWidth));
Console.WriteLine(id2.PadLeft(totalWidth));
Console.WriteLine(id3.PadLeft(totalWidth));
}
}
出力結果:
--- 右寄せ (PadLeft) ---
0123456789
101
9987
5
PadRight(int totalWidth):左寄せ(末尾に空白を埋める)
PadRightメソッドは、文字列の合計の長さが totalWidth になるまで、**末尾(右側)**に空白文字を挿入した新しい文字列を返します。
- 結果として、文字列は指定された幅の中で「左寄せ」されます。
PadRight のコード例
商品名と価格を一覧表示する際、商品名(itemName)をPadRight(20)で20桁(左寄せ)に揃える例です。
using System;
public class PadRightExample
{
public static void Main()
{
string item1 = "Standard Widget";
decimal price1 = 1500m;
string item2 = "Premium Widget";
decimal price2 = 3000m;
int nameWidth = 20; // 商品名の幅を20桁に固定
Console.WriteLine("--- 左寄せ (PadRight) ---");
// "Standard Widget" (15桁) を 20桁(左寄せ)にする
string paddedItem1 = item1.PadRight(nameWidth);
string paddedItem2 = item2.PadRight(nameWidth);
// 比較のために括弧[]を付けて出力
Console.WriteLine($"[{paddedItem1}] Price: {price1:N0}");
Console.WriteLine($"[{paddedItem2}] Price: {price2:N0}");
}
}
出力結果:
--- 左寄せ (PadRight) ---
[Standard Widget ] Price: 1,500
[Premium Widget ] Price: 3,000
応用:PadLeft(int totalWidth, char paddingChar)(0埋め)
PadLeft(およびPadRight)には、第2引数としてchar(文字)を指定できるオーバーロードがあります。これにより、空白(スペース)の代わりに、指定した文字で桁埋め(パディング)することができます。
最も一般的な使用例が、'0'(ゼロ)を指定する「0埋め(ゼロパディング)」です。
0埋めのコード例
請求書番号(invoiceId)を、常に6桁の固定長(例: 000153)としてフォーマットする例です。
using System;
public class ZeroPaddingExample
{
public static void Main()
{
int invoiceId = 153;
// 1. ToString()でまず文字列に変換
string idString = invoiceId.ToString();
// 2. 全体の幅を 6 に、パディング文字を '0' に指定
string formattedId = idString.PadLeft(6, '0');
Console.WriteLine($"元のID: {idString}");
Console.WriteLine($"0埋め後: {formattedId}");
// 別のID
string idString2 = "4000".ToString();
string formattedId2 = idString2.PadLeft(6, '0');
Console.WriteLine($"0埋め後: {formattedId2}");
}
}
出力結果:
元のID: 153
0埋め後: 000153
0埋め後: 004000
(注: invoiceId.ToString("D6") という書式指定でも同様の結果が得られますが、PadLeftは任意の文字列に対してこの操作を行える柔軟性があります。)
注意点:文字列の不変性(Immutable)
PadLeftやPadRightは、ReplaceやRemoveといった他のC#の文字列操作メソッドと同様に、元の文字列を直接変更しません。
C#のstring型は不変(Immutable)であるため、これらのメソッドはパディングが完了した「新しい文字列」を戻り値として返します。結果を保持するには、必ず新しい変数に代入するか、元の変数に再代入する必要があります。
まとめ
PadLeftとPadRightは、文字列の桁数を固定してテキストの見た目を整えるための基本的なメソッドです。
PadLeft(width):width桁になるよう先頭に空白を埋めます(右寄せ)。PadRight(width):width桁になるよう末尾に空白を埋めます(左寄せ)。PadLeft(width, char):width桁になるよう先頭に指定した文字('0'など)を埋めます(0埋め)。
これらは、コンソール出力や固定長ファイルの生成など、文字列のアラインメント(整列)が必要な場面で不可欠な機能です。
