演習 - パディングと配置を見つける
string.Format()
メソッドは、次の例のような複合書式設定を実行するために使用されます。
string first = "Hello";
string second = "World";
string result = string.Format("{0} {1}!", first, second);
Console.WriteLine(result);
データ型を表すキーワードには、Console
クラスのメソッドを呼び出すのと同じ方法で呼び出すことができるメソッドがあることが、少し奇妙に思われるかもしれません。 実際には、string
データ型に類似するメソッドが多数あり、リテラル文字列または文字列型の変数も存在することになります。
これらの組み込みメソッドのカテゴリの簡単な一覧を次に示します。これにより、何ができるかを把握できます。
- 書式設定のために空白スペースを追加するメソッド (
PadLeft()
、PadRight()
) - 2 つの文字列を比較するか、比較を容易にするメソッド (
Trim()
、TrimStart()
、TrimEnd()
、GetHashcode()
、Length
プロパティ) - 文字列の内部を判断したり、文字列の一部だけを取得したりするのに役立つメソッド (
Contains()
、StartsWith()
、EndsWith()
、Substring()
) - 部分の置換、挿入、または削除によって文字列の内容を変更するメソッド (
Replace()
、Insert()
、Remove()
) - 文字列を文字列または文字の配列に変換するメソッド (
Split()
、ToCharArray()
)
前または後にスペースを追加して文字列を書式設定する
PadLeft()
メソッドにより、文字の合計数が、送信する引数と同じになるように、文字列の左側に空白スペースが追加されます。 この場合は、文字列の長さの合計を 12 文字にする必要があります。
前の演習のコードをすべて削除するか、行コメント演算子
//
を使ってコメントアウトします。Visual Studio Code エディターで次のようにコードを更新します。
string input = "Pad this"; Console.WriteLine(input.PadLeft(12));
Visual Studio Code の [ファイル] メニューで、[保存] を選択します。 コードをビルドまたは実行する前に、Program.cs ファイルを保存します。
[エクスプローラー] パネルで、TestProject フォルダーの場所にあるターミナルを開くには、TestProject を右クリックし、[統合ターミナルで開く] を選択します。 ターミナル パネルが開き、ターミナルが TestProject フォルダーの場所に対して開かれていることを示すコマンド プロンプトが含まれているはずです。
コードを実行するには、ターミナルのコマンド プロンプトで、「dotnet run」と入力し、Enter キーを押します。
Note
"実行するプロジェクトが見つかりませんでした" というメッセージが表示された場合は、ターミナルのコマンド プロンプトに、予期されている TestProject フォルダーの場所が表示されていることを確かめます。 例:
C:\Users\someuser\Desktop\csharpprojects\TestProject>
コードを実行すると、文字列の左側に 4 文字のプレフィックスが付いて、長さが 12 文字になることがわかります。
Pad this
文字列の右側にスペースまたは文字を追加するには、代わりに
PadRight()
メソッドを使用します。 1. Visual Studio Code エディターで次のようにコードを更新します。Console.WriteLine(input.PadRight(12));
コード ファイルを保存してから、Visual Studio Code を使ってコードを実行します。 文字列の末尾に文字が追加されたことはわかりませんが、そこにはそれらが存在します。
オーバーロードされたメソッドとは何ですか?
C# で "オーバーロードされたメソッド" とは、PadLeft()
メソッドのオーバーロードされたバージョンの場合と同様に、メソッドの機能を多少変更する異なるまたは余分な引数を使用した別のバージョンのメソッドです。
また、メソッドの 2 番目の "オーバーロードされた" バージョンのメソッドを呼び出して、スペースの代わりに使用する任意の文字を渡すこともできます。 この場合は、余分なスペースをダッシュ文字で埋めます。
前の手順のコードをすべて削除するか、行コメント演算子
//
を使ってコメントアウトします。Visual Studio Code エディターで次のようにコードを更新します。
Console.WriteLine(input.PadLeft(12, '-')); Console.WriteLine(input.PadRight(12, '-'));
コード ファイルを保存してから、Visual Studio Code を使ってコードを実行します。 長さが 12 文字の文字列の左側に 4 個のダッシュがプレフィックスとして付けられているのがわかるはずです。
----Pad this Pad this----
次は、この新たに得た知識を別の実際のシナリオに適用します。
埋め込み文字列の操作
レガシ メインフレーム システムを引き続きサポートしている支払処理会社で働いているとします。 多くの場合、それらのシステムでは、特定の列にデータを入力する必要があります。 たとえば、列 1 から 6 に支払い ID を、列 7 から 30 に受取人の名前を、列 31 から 40 に支払い額を格納します。 また、重要なのは、支払い額が右揃えであることです。
リレーショナル データベース管理システム内のデータをレガシ ファイル形式に変換するアプリケーションをビルドするように依頼されています。 統合が確実に正しく機能するようにするために、最初の手順として、レガシ システムの保守管理者に出力のサンプルを提供することで、ファイルの形式を確認します。 後で、この作業に基づいて、ASCII テキスト ファイルを介して処理対象の数百または数千の支払いを送信します。
支払い ID を出力に追加する
作業を開始するには、最初の 6 列に支払い ID を出力します。 目的に合ったランダムな支払いデータを選択します。
前の手順のコードをすべて削除するか、行コメント演算子
//
を使ってコメントアウトします。Visual Studio Code エディターで次のようにコードを更新します。
string paymentId = "769C"; var formattedLine = paymentId.PadRight(6); Console.WriteLine(formattedLine);
formattedLine
変数を再利用して、出力文字列を作成します。コード ファイルを保存してから、Visual Studio Code を使ってコードを実行します。 次の出力が表示されます。
769C
右側には 2 個の空白スペースがありますが、これらは表示されません。 次の手順で、それらが存在することを確認します。
受取人の名前を出力に追加する
次に、架空の受取人の名前を追加し、適切にパディングを指定します。
Visual Studio Code エディターで次のようにコードを更新します。
string paymentId = "769C"; string payeeName = "Mr. Stephen Ortega"; var formattedLine = paymentId.PadRight(6); formattedLine += payeeName.PadRight(24); Console.WriteLine(formattedLine);
+=
演算子により、文字列の連結を実行され、変数formattedLine
の以前の値が取得されて、それに新しい値が追加されます。 これは、次のコード例と同じ内容を簡略化したものです。formattedLine = formattedLine + payeeName.PadRight(24);
コード ファイルを保存してから、Visual Studio Code を使ってコードを実行します。 次の出力が表示されます。
769C Mr. Stephen Ortega
ここでも、受取人の名前の後に空白スペースがいくつかあります。 また、手順 1 の支払い ID の後に、2 個の空白スペースがあります。
出力に支払い額を追加する
次に、架空の支払い額を追加し、PadLeft()
を使用して出力を必ず右揃えにします。
Visual Studio Code エディターで次のようにコードを更新します。
string paymentId = "769C"; string payeeName = "Mr. Stephen Ortega"; string paymentAmount = "$5,000.00"; var formattedLine = paymentId.PadRight(6); formattedLine += payeeName.PadRight(24); formattedLine += paymentAmount.PadLeft(10); Console.WriteLine(formattedLine);
コード ファイルを保存してから、Visual Studio Code を使ってコードを実行します。 次の出力が表示されます。
769C Mr. Stephen Ortega $5,000.00
この出力は、レガシ システムの保守管理者が探していたものであるとあなたが理解していた内容に非常に近いものです。
結果をより簡単に確認できるように出力の上に数値の行を追加する
各データ要素が表示される正確な列をカウントするのは難しいため、列をカウントするのに役立つ行を出力のすぐ上に追加します。
Console.WriteLine("1234567890123456789012345678901234567890");
Visual Studio Code エディターで次のようにコードを更新します。
string paymentId = "769C"; string payeeName = "Mr. Stephen Ortega"; string paymentAmount = "$5,000.00"; var formattedLine = paymentId.PadRight(6); formattedLine += payeeName.PadRight(24); formattedLine += paymentAmount.PadLeft(10); Console.WriteLine("1234567890123456789012345678901234567890"); Console.WriteLine(formattedLine);
コード ファイルを保存してから、Visual Studio Code を使ってコードを実行します。 次の出力が表示されるはずです。これをレガシ システムの保守管理者に送信することで、新しい統合が正しく機能することを確認できます。
1234567890123456789012345678901234567890 769C Mr. Stephen Ortega $5,000.00
成功です。
要点
このユニットには、いくつかの重要なポイントがあります。
string
データ型、リテラル文字列、および string 型の変数のそれぞれで、文字列に対する書式設定、変更、その他の操作を実行するための多くのヘルパー メソッドが実装されます。PadLeft()
メソッドとPadRight()
メソッドでは、文字列の全長に空白 (または必要に応じて別の文字) が追加されます。- 文字列を右揃えにするには
PadLeft()
を使用します。 - 一部のメソッドはオーバーロードされています。つまり、それらには、機能に影響を与える異なる引数を使用した複数のバージョンのメソッドが用意されていることを意味します。
+=
演算子を使用すると、右側の新しい文字列が左側の既存の文字列に連結されます。