Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Java開発では文字列のバイト数を取得したり、指定したバイト数分だけ文字列を抽出したいといった処理はよくあります。

本記事では、Javaで文字列のバイト数を取得する方法について、サンプルコードを掲載しながらご紹介していきます。

Javaで文字列のバイト数を取得する方法


Javaで文字列のバイト数を取得する場合、Stringクラスの「getBytes().length」を利用することが可能です。

エンコーディング方法を指定

文字列のバイト数はエンコーディング方法により異なるため、取得する際にエンコーディング形式を指定してあげる必要があります。

文字列.getBytes("UTF-8").length
文字列.getBytes("Shift_JIS").length

getBytesの引数として「UTF-8」や「Shift_JIS」などのエンコーディング形式を指定します。

StringUtilsを使った方法

文字列のバイト数はStringUtilsクラスが提供する「getBytes」メソッドを使用することでも取得出来ます。

StringUtils.getBytes(文字列[, エンコーディング形式])

第2引数にはエンコーディング形式を指定することが出来ますが、指定しなかった場合は実行環境でのデフォルト文字コードでバイト数が取得されます。

文字列長との違いに注意

Stringクラスには同じく「length」を使って文字列長を取得することが可能です。

文字列.length()

この記述方法では指定した文字列の文字数が結果として取得出来ます。

自分がバイト数と文字列長のどちらを取得したいかで使い分けられるよう意識しておきましょう。

バイト数を取得するJavaサンプル


では実際に文字列からバイト数を取得するJavaのサンプルコードで、処理の内容について詳しく確認していきましょう。

サンプルコード1

1つ目はシンプルにバイト数を取得するメソッドと文字数を取得するメソッドで違いを確認してみます。

import com.mysql.cj.util.StringUtils;

public class Main {
	
	public static void main(String[] args) {
		try {
			System.out.println("あいうえお".getBytes("Shift_JIS").length);
			System.out.println(StringUtils.getBytes("あいうえお", "Shift_JIS").length);
			System.out.println("あいうえお".length());
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}

実行した結果が下記です。

10
10
5

7行目、8行目では取得方法を変えてShift_JIS形式でのバイト数を取得しており、9行目では文字数を取得するコードを記述しています。

サンプルコード2

次は7行目の文字コード指定を「UTF-8」に変えると取得結果にどのような変化があるのか確認してみましょう。

import com.mysql.cj.util.StringUtils;

public class Main {
	
	public static void main(String[] args) {
		try {
			System.out.println("あいうえお".getBytes("UTF-8").length);
			System.out.println(StringUtils.getBytes("あいうえお", "Shift_JIS").length);
			System.out.println("あいうえお".length());
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}

実行した結果が下記です。

15
10
5

UTF-8に変更したことにより出力結果が変わっており、理由はUTF-8の場合日本語の文字が3バイトとして換算されるためです。

サンプルコード3

ではStringUtilsでエンコーディング形式を指定せずに実行した結果も確認しておきましょう。

import com.mysql.cj.util.StringUtils;

public class Main {
	
	public static void main(String[] args) {
		try {
			System.out.println("あいうえお".getBytes("UTF-8").length);
			System.out.println(StringUtils.getBytes("あいうえお").length);
			System.out.println("あいうえお".length());
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}

実行した結果が下記です。

15
15
5

今回のサンプルでは実行環境のデフォルトエンコーディング形式がUTF-8なので、15バイトとして出力されていることが分かります。

Javaで文字列から任意のバイト数分抽出する


Javaではバイト数を基準に文字列を切り出すためのメソッドが用意されていません。

そこで文字数を切り出す「substring」メソッドを応用させることで、バイト数に応じた文字列を抽出することが可能となります。

サンプル

public class Main {
	
	public static void main(String[] args) {
		try {
			int targetByte = 7;
			int count = 0;
			String targetString = "あいうえお";
			String result = "";
			for(int i = 0; i < targetString.length(); i++) {
				String tmp1 = targetString.substring(i, i + 1);
				byte[] tmp2 = tmp1.getBytes("UTF-8");
				result = result + tmp1;
				
				if(count + tmp2.length > targetByte) {	
					break;
				} else {
					count = count + tmp2.length;
				}
			}
			
			System.out.println(result);
		} catch (Exception ex) {
			ex.printStackTrace();
			
		}
		
	}
}

実行した結果が下記です。

あいう

解説

サンプルコードでは、対象の文字列(7行目)を1文字ずつ取り出し(10行目)バイト数をまず取得(11行目)しています。

これまでに抽出した文字列の合計バイト数が指定バイト数(5行目)に達しているかを確認(14行目)し、該当文字列をコンソールに出力(21行目)するサンプルです。

今回はサンプルということでmainクラスに全ての処理を記述していますが、メソッドとして切り出すことで指定文字列や指定バイト数を引数に渡して切り替えるような処理の書き方も可能です。

さいごに: Javaでバイト数を確認するにはgetBytesメソッドを利用する


本記事では、Javaでバイト数を確認する方法についてサンプルコードを掲載しながらご紹介していきました。

バイト数を取得する際は、文字列のエンコーディング形式を意識することが大切です。

エンコーディング方法により取得結果が変わってきますので、デフォルト指定で実行する際にもエンコーディング形式が意図したものであるかは把握しておくようにしましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。