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#.length
と StringUtils.getByte
の差は冒頭でも記載した通りで、文字列長とバイト数の違いがよくわかると思います。
おや? UTF-8 を指定した時だけ、バイト数が変わっていますね。これは、Shift_JIS の場合、日本語文字は 2 バイトですが、UTF-8 の場合、日本語文字は 3 バイトだからです。UTF-8 についての説明はここでは割愛しますが、詳しく知りたい方は Wikipedia で調べてみましょう。
まとめ
Javaでバイト数を取得する方法をサンプルソースで解説しました。
実務の環境によっては、サーバ環境が UTF-8 でありながら、システム内の文字列チェックは Shift_JIS でおこなうというのが通常です。
文字エンコードについても十分な理解が必要ですね。
おつかれさまでした。