J#(Java)文字列のバイト数を取得する (LenB)

スポンサーリンク

旧システムなどの外部連携のために、テーブルに格納するデータにバイト制限をかける場合があります。良くあるのが、半角を 1 バイト、全角を 2 バイトでカウントして規定の長さに収めるなどです。

System.String クラスの Length プロパティでは文字数しか取得できません。というよりは、半角または全角という概念は消滅しつつあります。(Unicode や UTF-8 の文字コードを参照)

VB6 では LenB という関数で、バイト数を取得できました。StrConv 関数などの合わせ技で文字コードを変えてから、使用していました。

半角は 1 バイト、全角は 2 バイトという考えは、Shift_JIS という文字コードの考えです。つまりは、Shift_JIS にエンコードしてやれば、半角 1 バイト、全角 2 バイトでのバイト数が取得できます。

System.Text.Encoding クラスから GetEncoding メソッドを実行し、ここで Shift_JIS の Encoding のインスタンスを取得します。そのインスタンスから、GetByteCount メソッドを使用することで、Shift_JIS でのバイト数を求めることができます。

サンプルコード

以下にサンプルコードを示します。

J# 全般
import System.*

/********************************************************************************
 *
 *      Microsoft.VisualBasic.Strings をカバーした静的クラスです。
 *
 ********************************************************************************/

public class VBStrings {

  #region LenB メソッド

    /*********************************************************************************
     *      半角 1 バイト、全角 2 バイトとして、指定された文字列のバイト数を返します。
     *
     * @param   stTarget     バイト数取得の対象となる文字列。
     * @return              半角 1 バイト、全角 2 バイトでカウントされたバイト数。
     *********************************************************************************/
    public static final int LenB(final String stTarget) {
        return System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(stTarget);
    }

  #endregion

}

使用例は以下のようになります。

J# 全般
    // 半角 1 バイト、全角 1 バイトでのバイト数を取得する
    int iByteCount = VBStrings.LenB("123ABC");

    // 取得したバイト数を表示する
    MessageBox.Show(System.Convert.ToString(iByteCount));  //9

関連するリファレンス

準備中です。

スポンサーリンク