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

Javaでバイト数を取得する方法です。

文字列長ではなく、バイト数ですのでご注意ください。

String#.length とすると文字列長を取得できますね。たとえば、「あいうえお」の文字列長を知りたいとなれば、答えは 5 となります。しかし、「あいうえお」のバイト数を知りたいとなれば、答えは 文字エンコードにより変わってきます。

ここでは Javaでバイト数を取得する方法をサンプルソースで解説 します。


Javaでバイト数を取得するコード

とりあえずコードを紹介します。


/**
 * 文字エンコーディング 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 メソッドも用意しました。

Javaでバイト数を取得するコードのテスト

ここでは、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 で調べてみましょう。

まとめ

Javaでバイト数を取得する方法をサンプルソースで解説しました。

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

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

おつかれさまでした。

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