言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

C#辞典

  1. トップページ
  2. C#辞典
  3. 文字列.PadLeft() / PadRight()

文字列.PadLeft() / PadRight()

対応: C# 1.0(2002)

文字列を指定した長さになるよう左側に文字を埋める『PadLeft()』、右側に文字を埋める『PadRight()』メソッドと、書式指定文字列を作成する『string.Format()』メソッドです。

構文

// 左側に空白(または指定文字)を埋めて、totalWidth の長さにした文字列を返します
文字列.PadLeft(int totalWidth)
文字列.PadLeft(int totalWidth, char paddingChar)

// 右側に空白(または指定文字)を埋めて、totalWidth の長さにした文字列を返します
文字列.PadRight(int totalWidth)
文字列.PadRight(int totalWidth, char paddingChar)

// 書式指定文字列にパラメーターを埋め込んだ文字列を返します
string.Format(string format, object arg0, ...)

メソッド一覧

メソッド概要
PadLeft(int totalWidth)左側に空白を埋めて totalWidth 文字の文字列を返します。元の文字列が totalWidth 以上の長さの場合は変更されません。
PadLeft(int totalWidth, char paddingChar)左側に paddingChar を埋めて totalWidth 文字の文字列を返します。
PadRight(int totalWidth)右側に空白を埋めて totalWidth 文字の文字列を返します。
PadRight(int totalWidth, char paddingChar)右側に paddingChar を埋めて totalWidth 文字の文字列を返します。
string.Format(string format, ...){0}、{1} などのプレースホルダーを引数の値で置き換えた文字列を返します。

サンプルコード

Program.cs
using System;

// PadLeft() で右寄せ表示(数値の桁揃え)
for (int i = 1; i <= 5; i++) {
    string row = i.ToString().PadLeft(3);
    Console.WriteLine(row);
}

// PadLeft() でゼロ埋め
string code = "42".PadLeft(6, '0');
Console.WriteLine(code); // 000042
dotnet run
  1
  2
  3
  4
  5
000042

PadRight() で表を整形する

『PadRight()』で列を左寄せに揃えることができます。テキストの表示を整形するのに便利です。

TableFormat.cs
using System;

// PadRight() で左寄せ表示
string[] members = { "八神庵", "草薙京", "テリー・ボガード" };
int[] scores = { 95, 88, 72 };
for (int i = 0; i < members.Length; i++) {
    Console.WriteLine(members[i].PadRight(10) + scores[i] + "点");
}

// string.Format() で書式を指定する
string message = string.Format("{0}さんのスコアは{1}点です。", "八神庵", 95);
Console.WriteLine(message);

// 数値の書式指定(パーセントなど)
double ratio = 0.1567;
Console.WriteLine(string.Format("割引率: {0:P1}", ratio)); // 割引率: 15.7%
dotnet run
八神庵       95点
草薙京       88点
テリー・ボガード  72点
八神庵さんのスコアは95点です。
割引率: 15.7%

書式指定文字列

数値の書式指定文字列(ToString("D6") など)を使うとゼロ埋めや桁数指定が簡潔に書けます。文字列補間と組み合わせることもできます。

FormatString.cs
using System;

// ToString() の書式指定文字列でゼロ埋め(PadLeft の代替)
Console.WriteLine(42.ToString("D6")); // 000042
Console.WriteLine(255.ToString("X4")); // 00FF(16進数、4桁)
Console.WriteLine(3.14.ToString("F2")); // 3.14(小数2桁)

// 文字列補間でも書式指定が使える
double price = 1234.5;
Console.WriteLine($"価格: {price:N0}"); // 価格: 1,235
Console.WriteLine($"率: {0.756:P1}"); // 率: 75.6%
Console.WriteLine($"コード: {42:D6}"); // コード: 000042
dotnet run
000042
00FF
3.14
価格: 1,235
率: 75.6%
コード: 000042

よくあるミス

よくあるミス: 元の文字列が totalWidth 以上の場合

PadLeft() / PadRight() は元の文字列が totalWidth 以上の長さの場合、文字を切り捨てずにそのままの文字列を返します。桁が多い場合はレイアウトが崩れます。

pad_sample.cs
using System;

// 元の文字列が totalWidth 以上の場合は変更されない
string longStr = "ABCDEFGHIJ"; // 10文字
Console.WriteLine(longStr.PadLeft(5)); // ABCDEFGHIJ(切り詰められない)
Console.WriteLine(longStr.PadRight(5)); // ABCDEFGHIJ(切り詰められない)

// 桁数を超えた場合にも対応するには、Substring() で切り詰める
string truncated = longStr.Substring(0, Math.Min(5, longStr.Length));
Console.WriteLine(truncated.PadLeft(5)); //    ABC(切り詰めてからパディング)... 実際は "ABCDE"
dotnet run
ABCDEFGHIJ
ABCDEFGHIJ
ABCDE

概要

現代の C# では string.Format() の代わりに文字列補間($"{変数}")を使うことが多くなっています。ただし書式指定子(:P1:D6 など)は $"{値:書式}" の形式で文字列補間でも利用できます。

『PadLeft()』でゼロ埋めをする場合、数値.ToString("D6") のように数値の書式指定文字列を使う方法もあります。

文字列の分割と結合には『Split() / string.Join()』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。