PR

【C#】日本語を含む文字列のパディング方法

C#

単純なゼロパディングや空白パディングのやり方はすぐに検索できます。

しかし、日本語のようなマルチバイト文字列を含む場合について説明したものは、よくよく見ないと見つけられないので備忘録として残しておきます。

基本的なパディング

ゼロパディング

ゼロパディングとは、指定桁数になるまで左側にゼロを埋めることを言います。

var strValue = $"{123:D6}";
# 000123

var strValue = $"{123:000000}";
# 000123

空白パディング

空白パディングは、ゼロの代わりに空白(スペース)で埋めることを言います。

プラスの値なら左側に空白、マイナスの値なら右側に空白を埋めてくれます。

var strValue = $"{123:6}";
# ___123   ここでの_ (アンダーライン)は空白を表します

var strValue = $"{987:-10}";
# 987_______

マルチバイト文字列が含まれる場合は?

日本語のようなマルチバイト文字列を扱う場合、上記の方法では期待するような結果が得られない場合があります。

例えば、「”あいうえお”を20バイトになるように空白埋めしたい」とします。

var strValue = $"{"あいうえお":-20}";

これで得られる結果は、「あいうえお(空白15個)」となります。

つまりは、単純に文字数がカウントされて空白埋めされてしまうのです。

固定長にしたいので、これではダメです。。。

マルチバイト文字列のパディング

では、どうやって固定長にするのか?

答えは以下の通りです。

var strValue = $"{"あいうえお".PadRight(20 - Encoding.Unicode.GetByteCount("あいうえお"))};

GetByteCountメソッドで文字列のバイト数を取得できます。

Encoding.GetByteCount メソッド (System.Text)
派生クラスでオーバーライドされた場合、文字のセットをエンコードすることによって生成されるバイト数を計算します。

PadRightメソッドは、文字列の右側に空白を埋めるメソッドです。

今回は、指定バイト(20バイト)から文字列のバイト数を引いて、残りを空白で埋めるという形で用いました。

String.PadRight メソッド (System)
現在の文字列の末尾に空白または指定された Unicode 文字が埋め込まれた指定された長さの新しい文字列を返します。

コメント

タイトルとURLをコピーしました