Java 文字列のバイト数を取得する方法 - Stringクラス
Javaでバイト数を取得する方法です。
文字列長ではなく、バイト数ですのでご注意ください。
String#.length
とすると文字列長を取得できますね。たとえば、「あいうえお」の文字列長を知りたいとなれば、答えは 5 となります。しかし、「あいうえお」のバイト数を知りたいとなれば、答えは 文字エンコードにより変わってきます。
ここでは Javaでバイト数を取得する方法をサンプルソースで解説 します。
Sponsored Links
サンプルソース
とりあえずコードを紹介します。
/** * 文字エンコーディング 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 メソッドも用意しました。
Sponsored Links
テストしてみる
ここでは、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 で調べてみましょう。
Sponsored Links
まとめ
Javaでバイト数を取得する方法をサンプルソースで解説しました。
実務の環境によっては、サーバ環境が UTF-8 でありながら、システム内の文字列チェックは Shift_JIS でおこなうというのが通常です。
文字エンコードについても十分な理解が必要ですね。
おつかれさまでした。
Sponsored Links