C#でプログラミングしていると文字列の書式設定をしたいことがよくあります。文字列の書式設定は、ログ出力、UI表示、データ処理など、さまざまな場面で使用されます。
C#では、String.Formatメソッドを使用することで、数値の0埋め、日付の書式設定、16進数表示、桁数指定など、さまざまな書式設定を簡単に実装できます。この記事では、String.Formatメソッドの基本的な使い方から実務で頻繁に使用される応用テクニックまで、初心者エンジニアにも分かりやすく解説します。
目次
閉じる
1.C# String Formatの基本概念と使い方
String.Formatメソッドは、.NET Frameworkに標準で用意されている静的メソッドです。このメソッドを使用することで、文字列内に変数や数値を埋め込み、指定した書式で表示できます。
この章では、C#のString.Formatメソッドの基本概念と使い方を紹介します。
String.Formatメソッドの基本構文
String.Formatメソッドは、指定した書式でオブジェクトの値を文字列に変換して、別の文字列に挿入するメソッドです。
基本的な構文は以下のとおりです。
string result = string.Format(書式文字列, 引数0, 引数1, ...); |
書式文字列内では、プレースホルダーと呼ばれる {インデックス} の形式で置換位置を指定します。インデックスは0から開始される連番となります。
プレースホルダーの使用例は以下のとおりです。
string name = "田中"; int age = 30; string result = String.Format("私の名前は{0}で、年齢は{1}歳です。", name, age); Console.WriteLine(result); // 出力: 私の名前は田中で、年齢は30歳です。 |
C# 文字列補間式との違いと使い分け
C# 6.0で導入された文字列補間は、String.Formatメソッドより簡潔に文字列の書式設定が可能です。文字列補間式は、文字列の前に「$」記号を付けて使用します。
文字列補間式とString.Formatメソッドの違いは以下のとおりです。
// String.Format string name = "田中"; int age = 30; string message1 = String.Format("名前: {0}, 年齢: {1}", name, age); Console.WriteLine(message1);
string message2 = $"名前: {name}, 年齢: {age}"; Console.WriteLine(message2); |
特徴 | String.Format | 文字列補間式 |
---|---|---|
可読性 | インデックス番号で参照するため分かりにくい | 変数名を直接記述するため分かりやすい |
動的書式 | 実行時に書式文字列を変更可能 | コンパイル時に固定 |
複雑な書式 | 複合書式指定が豊富 | 基本的な書式指定のみ |
動的に書式文字列を変更する必要がある場合や、複雑な書式設定が必要な場合はString.Formatを使用し、シンプルな文字列結合や基本的な書式設定の場合は文字列補間式を使用するのがおすすめです。
2.C# String Formatによる0埋めの方法
数値の0埋めは、桁数を揃える必要があるときに使われます。特に連番管理やファイル名の生成、IDの統一表示などで使用されることが多いです。
この章では、C#のString.Formatメソッドを使用して数値を0埋めする方法を紹介します。
数値の0埋め書式設定
String.Formatでは、D書式指定子と桁数を組み合わせることで数値の0埋めができます。
String.Formatで数値の0埋めを書式設定する例は以下のとおりです。
int number = 42;
string result1 = String.Format("{0:D5}", number); Console.WriteLine(result1); // 出力: 00042
string result2 = String.Format("{0:D3}", number); Console.WriteLine(result2); // 出力: 042 |
なお、D書式指定子は10進数整数専用です。
より汎用的な0埋めには0を使用した書式パターンも使用できます。
int id = 123; string paddedId = String.Format("{0:00000}", id); Console.WriteLine(paddedId); // 出力: 00123 |
実際の業務システムでは、以下のような用途で0埋めが活用されます。
// 社員番号の生成例 int employeeId = 456; string employeeNumber = String.Format("EMP{0:D6}", employeeId); Console.WriteLine(employeeNumber); // 出力: EMP000456
for (int i = 1; i <= 10; i++) { string fileName = String.Format("data_{0:D3}.txt", i); Console.WriteLine(fileName); // 出力: data_001.txt, data_002.txt, ..., data_010.txt } |
小数点を含む数値の0埋め書式設定
小数点を含む数値を0埋めするには、整数部分と小数部分で異なる書式指定子を使用します。
F書式指定子を使用することで、小数点以下の桁数を指定できます。
double value = 123.45;
string result1 = String.Format("{0:F2}", value); Console.WriteLine(result1); // 出力: 123.45
string result2 = String.Format("{0:F4}", value); Console.WriteLine(result2); // 出力: 123.4500 |
整数部分と小数部分で個別に0埋めを設定する例は以下のとおりです。
double value = 12.3;
string result1 = String.Format("{0:00000.00}", value); Console.WriteLine(result1); // 出力: 00012.30
string result2 = String.Format("{0:000.0000}", value); Console.WriteLine(result2); // 出力: 012.3000 |
小数点以下を桁数制御することで、四捨五入した値を表現できます。
double preciseValue = 123.456789;
string result1 = String.Format("{0:000.00}", preciseValue); Console.WriteLine(result1); // 出力: 123.46 |
小数点を含む数値の0埋めでは、表示要件に応じて適切な桁数を設定することが重要です。特に金融システムや測定データの表示では、精度と可読性のバランスを考慮した書式設定が求められます。
関連記事
C#とは?基本文法や特徴、メリット、開発分野まで初心者に必要な情報をわかりやすく解説
3.C# String Formatによる日付の書式設定
日付と時刻の書式設定は、ログ出力、レポート作成、ユーザーインターフェースへの表示など、多くの場面で必要となります。
この章では、C#のString.Formatメソッドを使用して日付の書式を設定する方法を紹介します。
日付フォーマットの指定方法
String.Formatメソッドでは、標準の日付時刻書式指定子を使用することで、さまざまな形式での日付表示が可能です。
標準日時書式指定子の使用例は以下のとおりです。
DateTime currentDate = new DateTime(2024, 12, 25, 14, 30, 45);
string shortDate = String.Format("{0:d}", currentDate); Console.WriteLine(shortDate); // 出力: 2024/12/25
string longDate = String.Format("{0:D}", currentDate); Console.WriteLine(longDate); // 出力: 2024年12月25日
string shortTime = String.Format("{0:t}", currentDate); Console.WriteLine(shortTime); // 出力: 14:30
string longTime = String.Format("{0:T}", currentDate); Console.WriteLine(longTime); // 出力: 14:30:45 |
よく使用される標準日時書式指定子は以下になります。
書式指定子 | 説明 | 出力例 |
---|---|---|
d | 短い日付形式 | 2024/12/25 |
D | 長い日付形式 | 2024年12月25日 |
t | 短い時刻形式 | 14:30 |
T | 長い時刻形式 | 14:30:45 |
f | 長い日付と短い時刻形式 | 2024年12月25日 14:30 |
G | 長い日付と長い時刻形式 | 2024年12月25日 14:30:45 |
g | 短い日付と短い時刻形式 | 2024/01/01 12:34 |
F | 長い日付と長い時刻形式 | 2024年12月25日水曜日 14:30:45 |
カスタム日付書式設定による応用方法
標準書式指定子では対応できない形式で日付を表示したい場合は、カスタム日付時刻書式文字列を使用します。カスタム日付書式設定を使用することで、業務要件に応じた柔軟な日付表示が実現できます。
カスタム日付書式設定の例は以下のとおりです。
DateTime businessDate = new DateTime(2024, 3, 5, 9, 15, 30);
string customFormat1 = String.Format("{0:yyyy-MM-dd}", businessDate); Console.WriteLine(customFormat1); // 出力: 2024-03-05
string customFormat2 = String.Format("{0:yyyy年M月d日}", businessDate); Console.WriteLine(customFormat2); // 出力: 2024年3月5日
string customFormat3 = String.Format("{0:HH時mm分ss秒}", businessDate); Console.WriteLine(customFormat3); // 出力: 09時15分30秒 |
実際の業務システムでは以下のように使用されます。
// ログ出力用の統一書式 DateTime logTime = DateTime.Now; string logEntry = String.Format("[{0:yyyy-MM-dd HH:mm:ss.fff}] システム開始", logTime); Console.WriteLine(logEntry); // 出力: [2025-05-28 15:30:45.123] システム開始
DateTime fileDate = DateTime.Now; string fileName = String.Format("backup_{0:yyyyMMdd_HHmmss}.sql", fileDate); Console.WriteLine(fileName); // 出力: backup_20250528_153045.sql
DateTime reportDate = DateTime.Today; string reportHeader = String.Format("売上レポート ({0:yyyy年MM月dd日} 現在)", reportDate); Console.WriteLine(reportHeader); // 出力: 売上レポート (2025年05月28日 現在) |
よく使用されるカスタム日付書式設定は以下のとおりです。
書式指定子 | 説明 | 表示例 |
---|---|---|
yyyy | 4桁の年 | 2024 |
yy | 2桁の年 | 24 |
MMMM | 月の完全名 | 1月 |
MMM | 月の省略名 | 1月 |
MM | 2桁の月 | 01 |
M | 1桁または2桁の月 | 1 |
dddd | 曜日の完全名 | 月曜日 |
ddd | 曜日の省略名 | 月 |
dd | 2桁の日 | 01 |
d | 1桁または2桁の日 | 1 |
HH | 24時間形式の時間 (00-23) | 22 |
hh | 12時間形式の時間 (01-12) | 10 |
mm | 2桁の分 | 34 |
ss | 2桁の秒 | 56 |
tt | 午前/午後 (AM/PM) | 午前 |
関連記事
【C#】DateTime完全ガイド:初期化・文字列変換から年月日・時間・ミリ秒操作まで詳細解説
.NET Frameworkとは?バージョン確認から.NETの違い、インストール、よくあるエラー解決策まで解説
4.C# String Formatを用いた16進数の表示方法
16進数は、コンピューターの内部表現を理解したり、色の表現、ネットワーク通信のデバッグなど、さまざまな場面で役立ちます。
この章では、C#のString.Formatメソッドを使用して16進数を設定する方法を紹介します。
16進数の表示方法
String.Formatメソッドで数値を16進数に変換するには、X または x 書式指定子を使用します。
X は大文字の16進数、x は小文字の16進数を表します。桁数を指定するには、X または x の後に桁数を記述します。桁が足りない場合は、先頭に0が追加されます。
16進数表示の例は以下の通りです。
int decimalValue = 255;
string upperHex = String.Format("{0:X}", decimalValue); Console.WriteLine(upperHex); // 出力: FF
string lowerHex = String.Format("{0:x}", decimalValue); Console.WriteLine(lowerHex); // 出力: ff
string paddedHex = String.Format("{0:X4}", decimalValue); Console.WriteLine(paddedHex); // 出力: 00FF |
X または x 書式指定子を使用することで、さまざまな数値型を16進数に変換できます。
// byte型の16進数変換 byte byteValue = 170; string byteHex = String.Format("{0:X2}", byteValue); Console.WriteLine(byteHex); // 出力: AA
long longValue = 4294967295L; string longHex = String.Format("{0:X8}", longValue); Console.WriteLine(longHex); // 出力: FFFFFFFF
int negativeValue = -1; string negativeHex = String.Format("{0:X8}", negativeValue); Console.WriteLine(negativeHex); // 出力: FFFFFFFF |
16進数表示の利用シーン
16進数表示は、以下のようなシーンで利用されます。
色の表現: Web開発や画像処理で色をRGB値で表現するときに、16進数が使われます (例: #FF0000 は赤色)。
メモリダンプ:プログラムのデバッグ時に、メモリの内容を16進数で表示して解析します。
ネットワーク通信:ネットワークパケットのデータを16進数で表示して、通信内容を解析します。
暗号化:暗号化されたデータを16進数で表現することがあります。
16進数を使用してカラーコードを表示する例は以下の通りです。
// RGB値から色コードを生成 int red = 255; int green = 128; int blue = 0;
Console.WriteLine(colorCode); // 出力: #FF8000
uint argbColor = 0xFF808000; string fullColorCode = String.Format("#{0:X8}", argbColor); Console.WriteLine(fullColorCode); // 出力: #FF808000 |
メモリの内容を16進数で表示する例は以下になります。
byte[] memoryData = { 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64 };
for (int i = 0; i < memoryData.Length; i += 8) { // アドレス表示 string address = String.Format("{0:X4}: ", i); Console.Write(address);
// 16進数表示 for (int j = i; j < Math.Min(i + 8, memoryData.Length); j++) { string hexValue = String.Format("{0:X2} ", memoryData[j]); Console.Write(hexValue); }
Console.WriteLine(); } // 出力例: // 0000: 48 65 6C 6C 6F 20 57 6F // 0008: 72 6C 64 |
16進数は単なる数値表現の一形式ではなく、ハードウェアやOSに近い部分を扱うプログラミングや、デバッグ作業、データ解析など幅広く活用されています。適切な桁数指定と大文字・小文字の使い分けにより、目的に合わせて見やすい表示が実現可能です。
5.C# String Formatによる桁数指定と配列操作
String.Formatメソッドでは、複数の引数をまとめて書式設定することも可能です。配列を引数として渡すことで、複数の値を一度に書式設定できます。
また、桁数指定機能を活用することで、文字列の表示幅を合わせたり、右揃え、左揃えといった整形が可能です。この機能は、表形式のデータ表示やレポート生成の際に活用できます。
この章では、C#のString.Formatメソッドで桁数指定や配列操作する方法を紹介します。
桁数指定による表示幅の制御
String.Formatメソッドでは、書式指定子に数値を指定することで表示幅を制御できます。これにより、文字列の左右に空白を挿入したり、特定の幅に揃えたりできます。
桁数を指定して表示幅を制御する例は以下のとおりです。
string message = "Hello";
string rightAligned = String.Format("{0,10}", message); Console.WriteLine(rightAligned); // 出力: Hello
string leftAligned = String.Format("{0,-10}", message); Console.WriteLine(leftAligned); // 出力: Hello |
また、書式指定子と桁数指定を組み合わせることも可能です。桁数指定の構文は {インデックス,桁数:書式指定子} となります。桁数が正の値の場合は右寄せ、負の値の場合は左寄せになります。
double[] values = { 123.456, 7.89, 1000.1 };
foreach (double value in values) { // 右寄せ10桁、小数点以下2桁 string formatted = String.Format("{0,10:F2}", value); Console.WriteLine(formatted); } // 出力: // 数値の桁揃え例: // 123.46 // 7.89 // 1000.10 |
配列や複数の引数を一括で書式設定する方法
String.Formatメソッドでは、複数の引数をまとめて書式設定することも可能です。配列を引数として渡すことで、複数の値を一度に書式設定できます。
String.Formatメソッドで配列要素を処理するには、ループ処理と組み合わせるとよいでしょう。
// 配列要素の一括書式設定例 int[] numbers = { 1, 22, 333, 4444, 55555 };
foreach (int number in numbers) { string formatted = String.Format("{0:D6}", number); Console.WriteLine(formatted); } // 出力: // 配列要素の0埋め表示: // 000001 // 000022 // 000333 // 004444 // 055555 |
また、インデックスを指定することで配列全体を1行表示することも可能です。
string[] names = { "Alice", "Bob", "Charlie" };
string formattedNames = String.Format("{0}, {1}, {2}", names[0], names[1], names[2]); Console.WriteLine(formattedNames); // 出力: Alice, Bob, Charlie |
関連記事
C# foreach完全ガイド|基本構文からコレクション操作・LINQ連携・ループ制御まで徹底解説
【C#】try-catchの使い方と例外処理|throwや複数例外の対応と使いどころを解説
6.まとめ
本記事では、C#のString.Formatメソッドについて、基本的な使い方から応用テクニックまでを解説しました。
String.Formatメソッドを活用すると文字列の書式設定が可能です。数値の0埋め、日付書式、16進数表示、桁数指定など、さまざまな書式を設定できます。
出力文字列を書式設定することで、ログ出力の統一、レポート生成やデータ表示の整形が可能です。String.Formatを適切に活用することで、保守性と可読性の向上が期待できます。
本記事で紹介したテクニックを参考に、String.Formatメソッドを活用して、より効率的で品質の高いC#アプリケーションの開発を目指しましょう。
本記事が皆様にとって少しでもお役に立てますと幸いです。
「フリーランスボード」は、数多くのフリーランスエージェントが掲載するITフリーランスエンジニア・ITフリーランス向けの案件・求人を一括検索できるサイトです。
開発環境、職種、単価、稼働形態、稼働日数など様々な条件から、あなたに最適なフリーランス案件・求人を簡単に見つけることができます。
単価アップを目指す方や、自分の得意なスキルを活かせる案件に参画したい方は、ぜひ「フリーランスボード」をご利用ください。
自身に最適なフリーランスエージェントを探したい方はこちらよりご確認いただけます。