C# Tips | 文字列処理:パディング(左)

C# C#
スポンサーリンク

はじめに 「左パディング」は“桁をそろえて、きれいに並べる”技

業務システムでは、こんな表示やデータ形式がよく出てきます。

1001 にしたい(3桁でゼロ埋め)
AA にしたい(4文字幅で右寄せ)
1234500012345 にしたい(8桁固定のコード)

こういう「足りない桁を左側に埋めて、長さをそろえる」処理が 左パディング(Left Padding) です。
C# には、これを簡単にやってくれる PadLeft というメソッドが用意されています。

ここでは、初心者向けに、

PadLeft の基本的な使い方
ゼロ埋め・スペース埋めの違い
数値を文字列にしてからパディングするパターン
業務ユーティリティとしてどうまとめるか

を、例題付きでかみ砕いて説明していきます。


基本:string.PadLeft で左パディングする

PadLeft のシグネチャと意味

string 型には、次のようなメソッドがあります。

string s = "123";
string padded = s.PadLeft(5);          // 幅5、埋め文字はスペース
string paddedZero = s.PadLeft(5, '0'); // 幅5、埋め文字は '0'
C#

PadLeft には2つのオーバーロードがあります。

PadLeft(int totalWidth)
PadLeft(int totalWidth, char paddingChar)

意味はこうです。

totalWidth:最終的にしたい「文字列の長さ」
paddingChar:足りない分を埋めるときに使う文字(省略時はスペース ' '

元の文字列がすでに totalWidth 以上の長さなら、そのまま返されます(切り捨てはされません)。

スペースで左パディング(右寄せ表示)

まずはデフォルト(スペース埋め)の例です。

string s1 = "A";
string s2 = "AB";
string s3 = "ABC";

Console.WriteLine($"[{s1.PadLeft(4)}]");
Console.WriteLine($"[{s2.PadLeft(4)}]");
Console.WriteLine($"[{s3.PadLeft(4)}]");
C#

出力イメージはこうなります。

[   A]
[  AB]
[ ABC]
[ABC]  // もし "ABC".PadLeft(3) ならそのまま

文字列の左側にスペースが追加されて、右寄せになっているのが分かると思います。
コンソール表示や帳票で「桁をそろえて見やすくしたい」ときに便利です。


ゼロ埋めで左パディング(コードや番号でよく使う)

‘0’ を指定してゼロ埋めする

業務で一番よく使うのは、「数字をゼロ埋めして桁をそろえる」パターンです。
例えば、3桁のコードにしたい場合はこう書きます。

string code1 = "1";
string code2 = "12";
string code3 = "123";

Console.WriteLine(code1.PadLeft(3, '0')); // 001
Console.WriteLine(code2.PadLeft(3, '0')); // 012
Console.WriteLine(code3.PadLeft(3, '0')); // 123
C#

ここで重要なのは、

PadLeft(3, '0') は「長さ3になるまで左側を ‘0’ で埋める」という意味
元の文字列が3文字以上なら、そのまま返る

というルールです。

数値をゼロ埋めしたいときは「一度文字列にする」

PadLeft文字列のメソッド なので、数値に対して直接は使えません。
数値をゼロ埋めしたいときは、いったん ToString() で文字列にしてからパディングします。

int n1 = 1;
int n2 = 12;
int n3 = 123;

Console.WriteLine(n1.ToString().PadLeft(3, '0')); // 001
Console.WriteLine(n2.ToString().PadLeft(3, '0')); // 012
Console.WriteLine(n3.ToString().PadLeft(3, '0')); // 123
C#

この「数値 → 文字列 → パディング」という流れは、
注文番号・連番・コードなどでよく使うパターンです。


数値フォーマットとの違い:PadLeft と ToString(“D3”)

ToString の書式指定でもゼロ埋めできる

実は、数値のゼロ埋めには PadLeft 以外にも方法があります。
ToString の書式指定を使う方法です。

int n1 = 1;
int n2 = 12;
int n3 = 123;

Console.WriteLine(n1.ToString("D3")); // 001
Console.WriteLine(n2.ToString("D3")); // 012
Console.WriteLine(n3.ToString("D3")); // 123
C#

"D3" は「10進数(Decimal)で、最低3桁」という意味です。
足りない桁は自動的にゼロで埋めてくれます。

どちらを使うべきか?

数値のゼロ埋めだけが目的なら、ToString("D3") のほうが意図がはっきりしていておすすめです。
一方で、

文字列に対して任意の文字でパディングしたい
数値以外の文字列(コード、IDなど)にも同じ処理をしたい

といった場合は、PadLeft のほうが汎用的です。

イメージとしては、

数値専用のゼロ埋め → ToString("D桁数")
文字列全般の左パディング → PadLeft

と使い分けるときれいです。


業務ユーティリティとしてまとめる

「ゼロ埋め」「スペース埋め」を名前で分ける

毎回 PadLeft(3, '0') と書くのも悪くはないですが、
業務システムでは「意味のある名前のユーティリティ」にしておくと読みやすくなります。

public static class PaddingUtil
{
    public static string LeftPadWithZero(string value, int totalWidth)
    {
        if (value == null) value = string.Empty;
        return value.PadLeft(totalWidth, '0');
    }

    public static string LeftPadWithSpace(string value, int totalWidth)
    {
        if (value == null) value = string.Empty;
        return value.PadLeft(totalWidth, ' ');
    }

    public static string LeftPadNumberWithZero(int number, int totalWidth)
    {
        return number.ToString().PadLeft(totalWidth, '0');
        // あるいは number.ToString($"D{totalWidth}") でもOK
    }
}
C#

使い方はこんな感じです。

Console.WriteLine(PaddingUtil.LeftPadWithZero("123", 5));  // 00123
Console.WriteLine(PaddingUtil.LeftPadWithZero("1", 3));    // 001
Console.WriteLine(PaddingUtil.LeftPadWithSpace("A", 4));   // "   A"
Console.WriteLine(PaddingUtil.LeftPadNumberWithZero(42, 4)); // 0042
C#

LeftPadWithZero という名前を見るだけで、「左側をゼロで埋めるんだな」と分かるのがポイントです。

null や空文字の扱いをユーティリティ側で決めておく

上の例では、valuenull のときに空文字に変換しています。
こうしておくと、呼び出し側で毎回 value ?? "" と書かなくて済みます。

「null をどう扱うか」はプロジェクトの方針にもよりますが、
ユーティリティの中でルールを決めておくと、コード全体がスッキリします。


実務での使いどころと注意点

よくある使いどころ

左パディングは、業務でこんな場面によく登場します。

固定長ファイルの出力(桁数をきっちり合わせる必要がある)
帳票やコンソール表示で、数字やコードを右寄せしたい
コードやIDを「一定桁数のゼロ埋め」で表現したい(例:INV-000123

例えば、請求書番号を INV-000123 のようにしたい場合は、

int seq = 123;
string invoiceNo = "INV-" + PaddingUtil.LeftPadNumberWithZero(seq, 6);
// INV-000123
C#

のように書けます。

「すでに長い文字列」はそのまま返されることを意識する

PadLeft は、「足りないときだけ埋める」メソッドです。
元の文字列が totalWidth 以上の長さなら、そのまま返されます。

Console.WriteLine("12345".PadLeft(3, '0')); // 12345(切り捨てられない)
C#

「必ず3桁以内にしたい(長すぎたら切り捨てたい)」という要件がある場合は、
別途 Substring などで長さを制御する必要があります。


まとめ 「左パディングユーティリティ」は“桁をそろえて、機械にも人にも優しい文字列にする道具”

左パディングは、見た目は地味ですが、

桁をそろえて見やすくする
固定長フォーマットを守る
コードや番号を一定桁数で表現する

といった場面で、業務システムを支える重要なテクニックです。

押さえておきたいポイントは、

PadLeft(totalWidth) はスペース埋め、PadLeft(totalWidth, '0') でゼロ埋め
数値は一度 ToString() してからパディングする
数値のゼロ埋めだけなら ToString("D桁数") も便利
ユーティリティにまとめて「ゼロ埋め」「スペース埋め」を名前で表現すると読みやすい
元の文字列が長すぎる場合は、そのまま返される(切り捨てはされない)

ここまで理解できれば、「なんとなく PadLeft を使っている」段階から一歩進んで、
“業務のフォーマットや見た目のルールをコードとしてきちんと表現する”
左パディングユーティリティを、自分の手で設計・実装できるようになっていきます。

タイトルとURLをコピーしました