1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Java 17で追加されたHexFormatクラス

Last updated at Posted at 2021-11-30

この記事はSRA Advent Calendar 2021の1日目の記事です。

こんにちは! 関西事業部の佐々木です。

#3年ぶりのLTSバージョン
2021年の9月にリリースされたJava 17は、2018年リリースのJava 11以来のLTSバージョンになります。
(実際にLTSとするかどうかはJDKのディストリビュータによりますが)
LTSなので当然適用されることも多くなりそうなJava 17ですが、どのような変更点があるのか気になるところです。
JDK 11からの全ての追加APIを知りたい場合は
https://docs.oracle.com/en/java/javase/17/docs/api/new-list.html
を参考にしてもらうとして、この記事では個人的によく使うことになりそうな HexFormt クラスを紹介したいと思います。

#16進数表記用のクラス
ここ数年私が関わっているプロジェクトでは「16進数表記」を使う機会がとても多く、バイト配列と16進数文字列の変換なども頻繁にコーディングしています。
そのような場合、今までは外部のライブラリを使うことが多かったのですが、Java 17からは HexFormat クラスを使えばよさそうです。
ちなみにHexFormatクラスはimmutableでスレッドセーフです。

#HexFormatの使い方
HexFormatクラスを使うにはstaticメソッドの of() でオブジェクトを取得します。

HexFormat hex = HexFormat.of();

バイト配列から16進数文字列に変換するには formatHex() メソッドを使います。

byte[] bytes = {0, 1, -1, 10};
String hexString = hex.formatHex(bytes);
//hexString ==> "0001ff0a"

16進数文字列をバイト配列に変換したい場合は parseHex() メソッドを使います。

byte[] bytes = hex.parseHex("0aff");
// bytes ==> byte[2] {10, -1}

引数に渡す16進数文字列は大文字でも小文字でも、混同しててもOKです。

byte[] bytes = hex.parseHex("0AfF");
// bytes ==> byte[2] {10, -1}

バイト配列を 大文字の 16進数文字列に変換したいときは withUpperCase() メソッドを使ってHexFormatオブジェクトを取得します。

HexFormat hex = HexFormat.of().withUpperCase();

byte[] bytes = {0, 1, -1, 10};
String hexString = hex.formatHex(bytes);
//hexString ==> "0001FF0A"

他にも色々メソッドがありますが、よく使いそうなのはこれらになると思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?