Java 文字列のバイト数を取得する方法 - Stringクラス ホームページ制作 | 墨田区

Java 文字列のバイト数を取得する方法 – Stringクラス

LINEで送る
Pocket

Java でバイト数を取得する方法をご紹介します。文字列長ではなく、バイト数ですのでご注意ください。

String#.length とすると、文字列長を取得できますね。
たとえば、「あいうえお」の文字列長を知りたいとなれば、答えは 5 となります。

しかし、「あいうえお」のバイト数を知りたいとなれば、答えは 文字エンコードにより変わってきます。

サンプルソースを見ながら解説していきます。




【PR】マジか?!「アレ」してるLINEスタンプっていったい・・・


サンプルソース


/**
 * 文字エンコーディング Shift_JIS での文字列のバイト数を取得
 *
 * @param value 処理対象となる文字列
 * @return 文字列のバイト数
 */
public static int getByte(String value) {
    return getByte(value,"Shift_JIS");
}

/**
 * 指定した文字エンコーディングでの文字列のバイト数を取得
 *
 * @param value 処理対象となる文字列
 * @param enc 文字エンコード("Shift_JIS", "UTF-8" etc...)
 * @return 文字列のバイト数
 */
public static int getByte(String value, String enc) {
    if ( value == null || value.length() == 0 )
        return 0;
    int ret = 0;
    try {
        ret = value.getBytes(enc).length;
    } catch ( UnsupportedEncodingException e ) {
        ret = 0;
    }
    return ret;
}


取得の方法としては、String#getBytes().length を利用します。
この getBytes() には、引数として、文字エンコード ( Shift_JIS や UTF-8 など) を渡すことができます。
[注]引数の文字エンコードが対象外ですと UnsupportedEncodingException が発生します!

通常、実務では Shift_JIS での値チェックが多いと思いますので、今回は、文字エンコードを指定しない Shift_JIS 用の getByte メソッドも用意しました。

テスト


ここでは、StringUtils というユーティリティクラスに static メソッドとして記述しています。
こうすることで、ソースを美しく保つことができます。

それでは、早速テストしてみましょう。
せっかくなので、String#.length とも比較してみましょう。

また、1 つだけ UTF-8 の文字エンコードを指定してみます。

System.out.println("############### String#.length ################");
System.out.println("あいうえお".length());
System.out.println("ABCDEFGHIJ".length());
System.out.println("1234567890".length());
System.out.println("############### StringUtils.getByte ################");
System.out.println(StringUtils.getByte("あいうえお"));
System.out.println(StringUtils.getByte("あいうえお", "UTF-8"));
System.out.println(StringUtils.getByte("ABCDEFGHIJ"));
System.out.println(StringUtils.getByte("1234567890"));

結果

結果は、以下のようになりました。
############### String#.length ################
5
10
10
############### StringUtils.getByte ################
10
15
10
10

String#.lengthStringUtils.getByte の差は冒頭でも記載した通りで、文字列長とバイト数の違いがよくわかると思います。

おや? UTF-8 を指定した時だけ、バイト数が変わっていますね。
これは、Shift_JIS の場合、日本語文字は 2 バイトですが、UTF-8 の場合、日本語文字は 3 バイトだからです。
UTF-8 についての説明はここでは割愛しますが、詳しく知りたい方は Wikipedia で調べてみましょう。

実務の環境によっては、サーバ環境が UTF-8 でありながら、
システム内の文字列チェックは Shift_JIS でおこなうというのが通常です。

文字エンコードについても十分な理解が必要ですね。

LINEで送る
Pocket

この記事がお役に立ちましたら シェア をお願いいたします。

コメントを残す

コメント(必須)

お名前 (必須)
メールアドレス
(アドレスは公開されません)

Trackback URL