C#でアプリケーションを開発している際、数値を特定の桁数で揃えたり、コンソール出力で見栄えを整えるために文字列を左右に寄せたりしたい場面が多々あります。
例えば、「1」を「00001」と表示するゼロ埋めや、商品名と価格を綺麗に並べるための右詰め・左詰め処理です。
これらの操作を非常にシンプルかつ直感的に実現するのが、Stringクラスに用意されているPadLeftメソッドとPadRightメソッドです。
本記事では、初心者の方から実務でより高度なフォーマットを必要とする方まで、C#におけるパディング(詰め物)処理のすべてを詳しく解説します。
String.PadLeft と PadRight の基本概念
C#のstring型には、文字列の長さを調整するための標準的なメソッドとしてPadLeftとPadRightが搭載されています。
これらは既存の文字列を指定した長さ(合計幅)になるまで、特定の文字で埋める処理を行います。

メソッドの基本的な役割
PadLeftは、その名の通り「左側にパディングを行う」メソッドです。
左側を埋めるということは、結果として元の文字列は右側に寄せられるため、「右詰め」を実現したい場合に使用します。
一方でPadRightは「右側にパディングを行う」メソッドであり、元の文字列は左側に残るため、「左詰め」を実現したい場合に使用します。
この違いを理解しておくことが、レイアウトを崩さないための第一歩となります。
引数の構成
これらのメソッドには、主に2つのオーバーロードが存在します。
| メソッド名 | 引数1 (int totalWidth) | 引数2 (char paddingChar) |
|---|---|---|
| PadLeft(totalWidth) | 出力後の合計文字数 | 指定しない場合は半角スペース |
| PadLeft(totalWidth, paddingChar) | 出力後の合計文字数 | 埋めるために使用する任意の文字 |
| PadRight(totalWidth) | 出力後の合計文字数 | 指定しない場合は半角スペース |
| PadRight(totalWidth, paddingChar) | 出力後の合計文字数 | 埋めるために使用する任意の文字 |
パディング文字を指定しない場合はデフォルトで半角スペースが利用されます。
ゼロ埋めを行いたい場合は、第2引数に文字リテラルとしての'0'を渡すことになります。
PadLeft を使用した右詰めとゼロ埋め
PadLeftは実務において、数値を固定長にしてデータベースのキーやファイル名の一部とする際に最も頻繁に利用されます。

ゼロ埋めの基本コード
数値を文字列に変換してからPadLeftを呼び出すのが一般的な流れです。
using System;
public class Program
{
public static void Main()
{
// 元の数値
int number = 123;
// 文字列に変換してから、合計5桁になるように '0' で埋める
string paddedString = number.ToString().PadLeft(5, '0');
Console.WriteLine("元の数値: " + number);
Console.WriteLine("ゼロ埋め後: " + paddedString);
}
}
元の数値: 123
ゼロ埋め後: 00123
この例では、元の文字列「123」は3文字です。
引数に「5」を指定しているため、足りない2文字分が左側に補填されます。
半角スペースによる右詰め
金額を表示する場合や、右揃えのリストを作成する場合は、パディング文字を指定せずに使用します。
using System;
public class Program
{
public static void Main()
{
string price1 = "500";
string price2 = "12000";
string price3 = "150";
// 10桁の幅の中で右詰めに配置
Console.WriteLine(price1.PadLeft(10) + "円");
Console.WriteLine(price2.PadLeft(10) + "円");
Console.WriteLine(price3.PadLeft(10) + "円");
}
}
500円
12000円
150円
このように、PadLeftを使うことで桁数の異なる数字を綺麗に縦に整列させることができます。
PadRight を使用した左詰め
PadRightは、主に表形式のテキストデータを作成する際、項目名の幅を一定にして、その後に続くデータ(価格や説明など)の開始位置を揃えるために利用されます。

左詰めの実装例
以下のコードでは、商品名の長さを15文字に固定して、価格の表示位置を統一しています。
using System;
public class Program
{
public static void Main()
{
string itemA = "Apple";
string itemB = "Pineapple";
string itemC = "Grape";
// 15文字の幅で左詰めにする(右側にスペースを埋める)
Console.WriteLine(itemA.PadRight(15) + ": 150円");
Console.WriteLine(itemB.PadRight(15) + ": 400円");
Console.WriteLine(itemC.PadRight(15) + ": 200円");
}
}
Apple : 150円
Pineapple : 400円
Grape : 200円
itemBのように元の文字列が長くても、指定した幅(この場合は15)に到達するまでスペースが追加されます。
これにより、コロンの位置が完璧に揃うようになります。
注意点:元の文字列が指定幅を超えている場合
初心者が陥りやすいミスとして、「指定した幅よりも元の文字列が長い場合に、切り捨て(Truncate)が行われる」という誤解があります。
PadLeft および PadRight メソッドは、元の文字列を切り捨てることはありません。
もし合計幅(totalWidth)を「5」に設定し、元の文字列が「1234567」だった場合、メソッドは何の変更も加えずに元の文字列をそのまま返します。
string original = "1234567"; // 7文字
string padded = original.PadLeft(5, '0'); // 5文字で指定
Console.WriteLine(padded); // 出力: 1234567 (5文字にはならない)
もし、特定の桁数に必ず収めたい(はみ出た分を消したい)場合は、Substringメソッドなどを組み合わせて別途処理を記述する必要があります。
数値をゼロ埋めする他の方法との比較
C#にはPadLeft以外にもゼロ埋めを実現する方法がいくつかあります。
プロジェクトのコーディング規約や、読みやすさに応じて使い分けることが重要です。
1. ToString メソッドによる書式指定
数値型に対して直接書式を指定する方法です。
これは「数値を扱うことが確定している」場合に非常に強力です。
int val = 7;
string result = val.ToString("D5"); // D5は「10進数で5桁」を意味する
// 結果: "00007"
2. 文字列補間 (String Interpolation)
C# 6.0以降で推奨されている、最もモダンで読みやすい書き方です。
int val = 7;
// $マークを使い、変数の後に書式を指定する
string result = $"{val:D5}";
// 結果: "00007"
また、アライメント(幅の指定)も文字列補間で可能です。
int price = 500;
// コンマの後に幅を指定。正の数は右詰め、負の数は左詰め
string rightAligned = $"{price, 10}"; // 10桁で右詰め
string leftAligned = $"{price, -10}"; // 10桁で左詰め
使い分けの基準
パディング方法の使い分けについては、以下の基準を参考にしてください。
| 手法 | 適したケース |
|---|---|
| PadLeft / PadRight | すでに文字列型(string)になっているものを加工する場合や、0以外の任意の文字で埋めたい場合。 |
| ToString(“D5”) | 数値型(intなど)を単純に決まった桁数のゼロ埋め文字列に変換したい場合。 |
| 文字列補間 ($”…”) | 複数の変数を含んだ複雑なメッセージを組み立てる中で、一部の数値を整形したい場合。 |
実践的な活用シナリオ
ここでは、実際のシステム開発でPadLeftやPadRightがどのように役立つか、具体的なシナリオを見ていきましょう。
シナリオ1:連番付きのファイル名生成
大量の画像を処理するバッチプログラムなどで、「image_001.jpg」のように連番を振るケースです。
for (int i = 1; i <= 3; i++)
{
// 数値を3桁のゼロ埋めにしてファイル名を生成
string fileName = "image_" + i.ToString().PadLeft(3, '0') + ".jpg";
Console.WriteLine("生成ファイル: " + fileName);
}
シナリオ2:固定長データの作成
古いメインフレームとのデータ連携や、銀行振り込みデータのフォーマット(全銀フォーマットなど)では、データの位置が厳密に決まっている「固定長ファイル」が求められることがあります。
string userId = "12345";
string userName = "TANAKA";
string score = "95";
// IDは10桁右詰め、名前は20桁左詰め、スコアは3桁ゼロ埋め
string record = userId.PadLeft(10) + userName.PadRight(20) + score.PadLeft(3, '0');
Console.WriteLine(record);

パフォーマンスと注意点
PadLeftやPadRightをループ内で数万回呼び出すような処理を行う場合、内部的には新しい文字列オブジェクトが都度生成されることに注意が必要です。
C#の文字列(string)は不変(Immutable)なオブジェクトであるため、加工するたびにメモリ上に新しい領域を確保します。
もし極端にパフォーマンスが要求される場面(巨大なテキストファイルの生成など)では、StringBuilderクラスのAppendFormatや、より新しいSpan<char>を利用したメモリ効率の良いアプローチを検討することもあります。
しかし、通常の業務アプリケーションやツール制作においては、可読性に優れたPadLeftを使用することで全く問題ありません。
また、全角文字が含まれる場合のパディングには注意が必要です。
PadLeft(10)はあくまで「10文字分」の幅を確保するものであり、「10バイト分」ではありません。
全角文字(漢字やひらがな)は1文字でも表示上の幅が半角2文字分あるため、コンソール出力などで全角文字と半角文字が混在すると、期待通りに縦が揃わないことがあります。
この場合は、全角を2文字としてカウントするカスタムのメソッドを作成するなどの工夫が必要になります。
まとめ
C#のPadLeftとPadRightは、文字列の整形において非常に便利で欠かせないメソッドです。
右詰めやゼロ埋めを行いたいときは PadLeftを使い、左詰めを行いたいときは PadRightを使う、という基本をしっかり押さえておきましょう。
これらは単なる見た目の調整だけでなく、システム間連携におけるデータフォーマットの遵守など、実務上の重要な役割を担うこともあります。
本記事で紹介した数値の書式指定(ToStringや文字列補間)との違いを理解し、状況に応じて最適な方法を選択できるようになれば、よりクリーンでメンテナンス性の高いコードを書くことができるようになります。
ぜひ、ご自身のプロジェクトでも活用してみてください。
