.NET TIPS

数値を右詰めや0埋めで文字列化するには?[C#、VB]

デジタルアドバンテージ 遠藤 孝信
2004/01/30
2008/07/10 更新

 数値をファイルや帳票に出力する際には、文字列の幅を固定し右詰めにしたり、0埋めで出力したりしたい場合がある。このような用途には、Stringクラス(System名前空間)のFormatメソッドを使うのが簡単だ。

 Formatメソッドでは、書式を指定する「書式指定文字列」と、それに対応するオブジェクトを引数で指定する。本稿では、よく用いられるであろう整数値の文字列化に絞って解説する。

Formatメソッドによる文字列への値の埋め込み

 数値の書式指定を解説する前に、Formatメソッドの基本的な用法について触れておく。Formatメソッドがよく用いられるのは、次のように文字列中に変数の値を埋め込む場合だ。

string name = "鈴木";
int month = 1;
int day = 30;

string str = String.Format(
                "{0}さん、今日は{1}月{2}日です", name, month, day);
// 変数strの内容:鈴木さん、今日は1月30日です
Dim name As String = "鈴木"
Dim month As Integer = 1
Dim day As Integer = 30

Dim str As String = String.Format( _
                "{0}さん、今日は{1}月{2}日です", name, month, day)
' 変数strの内容:鈴木さん、今日は1月30日です
Formatメソッドの記述例(上:C#、下:VB)

 ここで、Formatメソッドの第1引数に指定した文字列が書式指定文字列であり、これには通常の文字列中に{0}や{1}などの「書式指定項目」が挿入されている。

 書式指定項目とは、0から始まるインデックス番号を中カッコで囲んで記述したものだ。書式指定項目部分は、インデックス番号に対応した、第2引数以降のオブジェクトを文字列化*したもので置き換えられる。上記の例では、文字列strの内容は「鈴木さん、今日は1月30日です」となる。

* すべてのオブジェクトは、そのToStringメソッドを呼び出すことにより文字列化できる。

数値の書式指定

 数値を書式指定して文字列にする場合は、書式指定項目にいくつかのパラメータを追加して記述できる。次の表は、よく使用される4つの場合について、書式指定項目の記述例をまとめたものだ。

指定する書式 書式指定項目の記述例 出力例
幅指定で右詰め String.Format("{0, 4}", num) “   1”
幅指定で左詰め String.Format("{0, -4}", num) “1   ”
0埋め String.Format("{0:D4}", num)
または
String.Format("{0:0000}", num)
“0001”
幅指定かつ0埋め String.Format("{0, 8:D4}", num) “    0001”
数値の書式指定でよく使用される書式指定項目の記述例

 この表の最初の2つの書式は、生成される文字列の幅を指定する場合である。これは、書式指定項目内のインデックス番号の後にコンマ(,)で区切って文字列の幅を整数で指定する。負の値を指定した場合には、文字列は左詰めとなる。

 表中の3つ目の書式は、数値を0埋めで文字列化する場合である。これには2つの記述方法がある。

 1つは、

{0:D4}

のように、インデックス番号の後にコロン(:)で区切って、10進数(Decimal)を表す書式指定子「D」と、文字列の幅を表す整数(この例では「4」)を指定する。この記述は「標準数値書式指定文字列」と呼ばれるもので、詳細についてはMSDNの「標準の数値書式指定文字列」の項を参照していただきたい。ちなみに、「D」の代わりに「X」を指定すると、16進数文字列に変換される(小文字の「x」の場合は16進数文字列も小文字となる)。

 0埋めの場合のもう1つの記述例である、

{0:0000}

は、インデックス番号の後にコロン(:)で区切って「ゼロ・プレースホルダ」と呼ばれる書式指定文字「0」を文字列の幅の数だけ並べて記述する方法だ。こちらについての詳細は、MSDNの「カスタム数値書式指定文字列」を参照していただきたい。

 表中の最後の書式は、文字列の幅の指定し、かつ0埋めで文字列化する場合の記述である。書式指定項目の正式な構文は、

{インデックス番号, 文字列の幅:書式指定子}
書式指定項目の正式な構文

であるが、「文字列の幅」と「書式指定子」は省略可能である。

Formatメソッドを利用したサンプル・プログラム

 次に、Formatメソッドを利用したサンプル・プログラムを示しておく。

// formatint.cs

using System;

public class FormatInteger {
  static void Main() {

    string output;
    int zero = 0;
    int eleven = 11;

    //// 例1

    output = String.Format("4けた右詰め【{0, 4}】", zero);
    Console.WriteLine(output);
    // 出力:4けた右詰め【   0】

    output = String.Format("4けた右詰め【{0, 4}】", eleven);
    Console.WriteLine(output);
    // 出力:4けた右詰め【  11】

    //// 例2

    Console.WriteLine ("【{0, 4}】【{1, 4}】", zero, eleven);
    // 出力:【   0】【  11】

    //// 例3

    Console.WriteLine("4けた左詰め【{0, -4}】", zero);
    // 出力:4けた左詰め【0   】

    Console.WriteLine("4けた左詰め【{0, -4}】", eleven);
    // 出力:4けた左詰め【11  】


    Console.WriteLine("4けた0埋め【{0:D4}】", zero);
    // 出力:4けた0埋め【0000】

    Console.WriteLine("4けた0埋め【{0:D4}】", eleven);
    // 出力:4けた0埋め【0011】


    Console.WriteLine("4けた0埋め【{0:0000}】", zero);
    // 出力:4けた0埋め【0000】

    Console.WriteLine("4けた0埋め【{0:0000}】", eleven);
    // 出力:4けた0埋め【0011】


    Console.WriteLine("8けたかつ4けた0埋め【{0, 8:D4}】", zero);
    // 出力:8けたかつ4けた0埋め【    0000】

    Console.WriteLine("8けたかつ4けた0埋め【{0, 8:D4}】", eleven);
    // 出力:8けたかつ4けた0埋め【    0011】

    //// 例4

    Console.WriteLine(
      "【{0, 4}】【{0, -4}】【{0:D4}】【{0:0000}】", eleven);
    // 出力:【  11】【11  】【0011】【0011】
  }
}

// コンパイル方法:csc formatint.cs
Formatメソッドを利用したC#のサンプル・プログラム(formatint.cs)

' formatint.vb

Imports System

Public Class FormatInteger
  Shared Sub Main()

    Dim output As String
    Dim zero As Integer = 0
    Dim eleven As Integer = 11

    '''' 例1

    output = String.Format("4けた右詰め【{0, 4}】", zero)
    Console.WriteLine(output)
    ' 出力:4けた右詰め【   0】

    output = String.Format("4けた右詰め【{0, 4}】", eleven)
    Console.WriteLine(output)
    ' 出力:4けた右詰め【  11】

    '''' 例2

    Console.WriteLine ("【{0, 4}】【{1, 4}】", zero, eleven)
    ' 出力:【   0】【  11】

    '''' 例3

    Console.WriteLine("4けた左詰め【{0, -4}】", zero)
    ' 出力:4けた左詰め【0   】

    Console.WriteLine("4けた左詰め【{0, -4}】", eleven)
    ' 出力:4けた左詰め【11  】


    Console.WriteLine("4けた0埋め【{0:D4}】", zero)
    ' 出力:4けた0埋め【0000】

    Console.WriteLine("4けた0埋め【{0:D4}】", eleven)
    ' 出力:4けた0埋め【0011】


    Console.WriteLine("4けた0埋め【{0:0000}】", zero)
    ' 出力:4けた0埋め【0000】

    Console.WriteLine("4けた0埋め【{0:0000}】", eleven)
    ' 出力:4けた0埋め【0011】


    Console.WriteLine("8けたかつ4けた0埋め【{0, 8:D4}】", zero)
    ' 出力:8けたかつ4けた0埋め【    0000】

    Console.WriteLine("8けたかつ4けた0埋め【{0, 8:D4}】", eleven)
    ' 出力:8けたかつ4けた0埋め【    0011】

    '''' 例4

    Console.WriteLine( _
      "【{0, 4}】【{0, -4}】【{0:D4}】【{0:0000}】", eleven)
    ' 出力:【  11】【11  】【0011】【0011】

  End Sub
End Class

' コンパイル方法:vbc formatint.vb
Formatメソッドを利用したVBのサンプル・プログラム(formatint.vb)

 プログラム中の「例2」で示しているように、生成された文字列をコンソールに出力する場合には、Consoleクラス(System名前空間)のWriteLineメソッドでも書式指定文字列を利用できる。

 また、「例4」で示しているように、書式指定文字列には同じインデックス番号を持つ書式指定項目を複数個記述することもできる。End of Article

カテゴリ:クラス・ライブラリ 処理対象:文字列
使用ライブラリ:Stringクラス(System名前空間)
使用ライブラリ:Consoleクラス(System名前空間)

この記事と関連性の高い別の.NET TIPS
日付や時刻を文字列に変換するには?
日付や時刻の文字列をDateTimeオブジェクトに変換するには?
DataGridViewコントロールで数値を3けた区切りで表示するには?
文字と文字列を変換するには?
数値を0埋めで文字列にするには?(ToString編)
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

更新履歴
【2008/07/10】VB(Visual Basic)のコード例とサンプル・プログラムを追加しました。

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH