モジュール java.base
パッケージ java.util

クラスHexFormat

java.lang.Object
java.util.HexFormat

public final class HexFormat extends Object
HexFormatは、バイトと文字、および16進エンコード文字列間で変換します。これには、プレフィクス、サフィクス、デリミタなどの追加形式のマークアップを含めることができます。

HexFormatには、プリセット・パラメータがof()およびofDelimiter(delimiter)の2つのファクトリがあります。 他のパラメータ組合せの場合、withXXXメソッドは、HexFormat変更したwithPrefix(String)withSuffix(String)withDelimiter(String)のコピーまたはwithUpperCase()またはwithLowerCase()パラメータの選択を返します。

プリミティブから16進文字列への変換には、toHexDigits(byte)toHexDigits(int)toHexDigits(long)などのtoHexDigitsメソッドが含まれます。デフォルトでは、小文字"0-9","a-f"が使用されます。 大文字16進数の変換の場合、文字は"0-9","A-F"です。 HexFormat.isUpperCase()パラメータのみが考慮されます。デリミタ、プレフィクスおよびサフィクスは使用されません。

16進文字列からプリミティブ変換の場合、fromHexDigitsメソッドには、fromHexDigits(string)fromHexDigitsToLong(string)およびfromHexDigit(int)が1文字またはコード・ポイントを変換します。 16進文字から変換する場合、"0-9", "a-f", and "A-F"内の数字と大文字および小文字は、対応する値0-15に変換されます。 デリミタ、プレフィクス、サフィクスおよび大文字のパラメータは使用されません。

バイト配列がフォーマットされた16進文字列変換の場合、formatHexメソッドにはformatHex(byte[])およびformatHex(Appendable, byte[])が含まれます。 フォーマットされた出力は文字列であるか、StringBuilderPrintStreamなどのAppendableに追加されます。 各バイト値は、プレフィクス、大文字または小文字から2つの16進文字、およびサフィクスとして書式設定されます。 最後の区切りを除き、各書式設定された値の後にデリミタが続きます。 大文字の16進文字列を生成する変換には、withUpperCase()を使用します。

書式設定された16進文字列からバイト配列への変換の場合、parseHexメソッドにはparseHex(CharSequence)およびparseHex(char[], offset, length)が含まれます。 各バイト値は、プレフィクス、2つの大文字と小文字を区別しない16進文字、およびサフィクスから解析されます。 最後の区切りを除き、各書式設定された値の後にデリミタが続きます。

APIのノート:
たとえば、個々のバイトは、toHexDigits(int)を使用して16進数の文字列に変換され、fromHexDigits(string)を使用して文字列からプリミティブ値に変換されます。

     HexFormat hex = HexFormat.of();
     byte b = 127;
     String byteStr = hex.toHexDigits(b);

     byte byteVal = (byte)hex.fromHexDigits(byteStr);
     assert(byteStr.equals("7f"));
     assert(b == byteVal);

     // The hexadecimal digits are: "7f"
 

小文字の16進数を使用したプレフィクス("#")を含むカンマ区切りの(", ")形式の場合、HexFormatは次のようになります:


     HexFormat commaFormat = HexFormat.ofDelimiter(", ").withPrefix("#");
     byte[] bytes = {0, 1, 2, 3, 124, 125, 126, 127};
     String str = commaFormat.formatHex(bytes);

     byte[] parsed = commaFormat.parseHex(str);
     assert(Arrays.equals(bytes, parsed));

     // The formatted string is: "#00, #01, #02, #03, #7c, #7d, #7e, #7f"
 

デリミタのコロン(":")および大文字を使用するバイト値のフィンガープリントの場合、HexFormatは次のようになります:


     HexFormat formatFingerprint = HexFormat.ofDelimiter(":").withUpperCase();
     byte[] bytes = {0, 1, 2, 3, 124, 125, 126, 127};
     String str = formatFingerprint.formatHex(bytes);
     byte[] parsed = formatFingerprint.parseHex(str);
     assert(Arrays.equals(bytes, parsed));

     // The formatted string is: "00:01:02:03:7C:7D:7E:7F"
 

これはvalue-basedクラスで、HexFormatのインスタンスでアイデンティティに依存する操作(参照の等価性の(==)、アイデンティティ・ハッシュ・コード、同期化など)を使用すると、予測できない結果が生じる可能性があるため、使用しないでください。 比較する場合は、equalsメソッドを使用することをお薦めします。

このクラスは不変でスレッドセーフです。

特に指定がないかぎり、null引数をメソッドに渡すと、NullPointerExceptionがスローされます。

導入されたバージョン:
17