Class HexFormat
public final class HexFormat extends Object
HexFormat
converts between bytes and chars and hex-encoded strings which may include additional formatting markup such as prefixes, suffixes, and delimiters. There are two factories of HexFormat
with preset parameters of()
and ofDelimiter(delimiter)
. For other parameter combinations the withXXX
methods return copies of HexFormat
modified withPrefix(String)
, withSuffix(String)
, withDelimiter(String)
or choice of withUpperCase()
or withLowerCase()
parameters.
For primitive to hexadecimal string conversions the toHexDigits
methods include toHexDigits(byte)
, toHexDigits(int)
, and toHexDigits(long)
, etc. The default is to use lowercase characters "0-9","a-f"
. For conversions producing uppercase hexadecimal the characters are "0-9","A-F"
. Only the HexFormat.isUpperCase()
parameter is considered; the delimiter, prefix and suffix are not used.
For hexadecimal string to primitive conversions the fromHexDigits
methods include fromHexDigits(string)
, fromHexDigitsToLong(string)
, and fromHexDigit(int)
converts a single character or codepoint. For conversions from hexadecimal characters the digits and uppercase and lowercase characters in "0-9", "a-f", and "A-F"
are converted to corresponding values 0-15
. The delimiter, prefix, suffix, and uppercase parameters are not used.
For byte array to formatted hexadecimal string conversions the formatHex
methods include formatHex(byte[])
and formatHex(Appendable, byte[])
. The formatted output is a string or is appended to an Appendable
such as StringBuilder
or PrintStream
. Each byte value is formatted as the prefix, two hexadecimal characters from the uppercase or lowercase digits, and the suffix. A delimiter follows each formatted value, except the last. For conversions producing uppercase hexadecimal strings use withUpperCase()
.
For formatted hexadecimal string to byte array conversions the parseHex
methods include parseHex(CharSequence)
and parseHex(char[], offset, length)
. Each byte value is parsed from the prefix, two case insensitive hexadecimal characters, and the suffix. A delimiter follows each formatted value, except the last.
- API Note:
- For example, an individual byte is converted to a string of hexadecimal digits using
toHexDigits(int)
and converted from a string to a primitive value usingfromHexDigits(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"
For a comma (
", "
) separated format with a prefix ("#"
) using lowercase hex digits theHexFormat
is: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"
For a fingerprint of byte values that uses the delimiter colon (
":"
) and uppercase characters theHexFormat
is: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"
This is a value-based class; use of identity-sensitive operations (including reference equality (
==
), identity hash code, or synchronization) on instances ofHexFormat
may have unpredictable results and should be avoided. Theequals
method should be used for comparisons.This class is immutable and thread-safe.
Unless otherwise noted, passing a null argument to any method will cause a
NullPointerException
to be thrown. - Since:
- 17
Method Summary
Modifier and Type | Method | Description |
---|---|---|
String |
delimiter() |
Returns the delimiter between hexadecimal values in formatted hexadecimal strings. |
boolean |
equals |
Returns true if the other object is a HexFormat with the same parameters. |
String |
formatHex |
Returns a hexadecimal string formatted from a byte array. |
String |
formatHex |
Returns a hexadecimal string formatted from a byte array range. |
<A extends Appendable> |
formatHex |
Appends formatted hexadecimal strings from a byte array to the Appendable . |
<A extends Appendable> |
formatHex |
Appends formatted hexadecimal strings from a byte array range to the Appendable . |
static int |
fromHexDigit |
Returns the value for the hexadecimal character or codepoint. |
static int |
fromHexDigits |
Returns the int value parsed from a string of up to eight hexadecimal characters. |
static int |
fromHexDigits |
Returns the int value parsed from a string range of up to eight hexadecimal characters. |
static long |
fromHexDigitsToLong |
Returns the long value parsed from a string of up to sixteen hexadecimal characters. |
static long |
fromHexDigitsToLong |
Returns the long value parsed from a string range of up to sixteen hexadecimal characters. |
int |
hashCode() |
Returns a hashcode for this HexFormat . |
static boolean |
isHexDigit |
Returns true if the character is a valid hexadecimal character or codepoint. |
boolean |
isUpperCase() |
Returns true if the hexadecimal digits are uppercase, otherwise false . |
static HexFormat |
of() |
Returns a hexadecimal formatter with no delimiter and lowercase characters. |
static HexFormat |
ofDelimiter |
Returns a hexadecimal formatter with the delimiter and lowercase characters. |
byte[] |
parseHex |
Returns a byte array containing hexadecimal values parsed from a range of the character array. |
byte[] |
parseHex |
Returns a byte array containing hexadecimal values parsed from the string. |
byte[] |
parseHex |
Returns a byte array containing hexadecimal values parsed from a range of the string. |
String |
prefix() |
Returns the prefix used for each hexadecimal value in formatted hexadecimal strings. |
String |
suffix() |
Returns the suffix used for each hexadecimal value in formatted hexadecimal strings. |
String |
toHexDigits |
Returns the two hexadecimal characters for the byte value. |
String |
toHexDigits |
Returns the four hexadecimal characters for the char value. |
String |
toHexDigits |
Returns the eight hexadecimal characters for the int value. |
String |
toHexDigits |
Returns the sixteen hexadecimal characters for the long value. |
String |
toHexDigits |
Returns up to sixteen hexadecimal characters for the long value. |
String |
toHexDigits |
Returns the four hexadecimal characters for the short value. |
<A extends Appendable> |
toHexDigits |
Appends two hexadecimal characters for the byte value to the Appendable . |
char |
toHighHexDigit |
Returns the hexadecimal character for the high 4 bits of the value considering it to be a byte. |
char |
toLowHexDigit |
Returns the hexadecimal character for the low 4 bits of the value considering it to be a byte. |
String |
toString() |
Returns a description of the formatter parameters for uppercase, delimiter, prefix, and suffix. |
HexFormat |
withDelimiter |
Returns a copy of this HexFormat with the delimiter. |
HexFormat |
withLowerCase() |
Returns a copy of this HexFormat to use lowercase hexadecimal characters. |
HexFormat |
withPrefix |
Returns a copy of this HexFormat with the prefix. |
HexFormat |
withSuffix |
Returns a copy of this HexFormat with the suffix. |
HexFormat |
withUpperCase() |
Returns a copy of this HexFormat to use uppercase hexadecimal characters. |
Method Details
of
public static HexFormat of()
withDelimiter
, withUpperCase
, withLowerCase
, withPrefix
, and withSuffix
return copies of formatters with new parameters.- Returns:
- a hexadecimal formatter with no delimiter and lowercase characters
ofDelimiter
public static HexFormat ofDelimiter(String delimiter)
withDelimiter
, withUpperCase
, withLowerCase
, withPrefix
, and withSuffix
return copies of formatters with new parameters.- Parameters:
-
delimiter
- a delimiter, non-null, may be empty - Returns:
- a
HexFormat
with the delimiter and lowercase characters
withDelimiter
public HexFormat withDelimiter(String delimiter)
HexFormat
with the delimiter.- Parameters:
-
delimiter
- the delimiter, non-null, may be empty - Returns:
- a copy of this
HexFormat
with the delimiter
withPrefix
public HexFormat withPrefix(String prefix)
HexFormat
with the prefix.- Parameters:
-
prefix
- a prefix, non-null, may be empty - Returns:
- a copy of this
HexFormat
with the prefix
withSuffix
public HexFormat withSuffix(String suffix)
HexFormat
with the suffix.- Parameters:
-
suffix
- a suffix, non-null, may be empty - Returns:
- a copy of this
HexFormat
with the suffix
withUpperCase
public HexFormat withUpperCase()
HexFormat
to use uppercase hexadecimal characters. The uppercase hexadecimal characters are "0-9", "A-F"
.- Returns:
- a copy of this
HexFormat
with uppercase hexadecimal characters
withLowerCase
public HexFormat withLowerCase()
HexFormat
to use lowercase hexadecimal characters. The lowercase hexadecimal characters are "0-9", "a-f"
.- Returns:
- a copy of this
HexFormat
with lowercase hexadecimal characters
delimiter
public String delimiter()
- Returns:
- the delimiter, non-null, may be empty
""
prefix
public String prefix()
- Returns:
- the prefix, non-null, may be empty
""
suffix
public String suffix()
- Returns:
- the suffix, non-null, may be empty
""
isUpperCase
public boolean isUpperCase()
true
if the hexadecimal digits are uppercase, otherwise false
.- Returns:
-
true
if the hexadecimal digits are uppercase, otherwisefalse
formatHex
public String formatHex(byte[] bytes)
formatHex(bytes, 0, bytes.length))
.- Parameters:
-
bytes
- a non-null array of bytes - Returns:
- a string hexadecimal formatting of the byte array
formatHex
public String formatHex(byte[] bytes, int fromIndex, int toIndex)
- Parameters:
-
bytes
- a non-null array of bytes -
fromIndex
- the initial index of the range, inclusive -
toIndex
- the final index of the range, exclusive - Returns:
- a string hexadecimal formatting each byte of the array range
- Throws:
-
IndexOutOfBoundsException
- if the array range is out of bounds
formatHex
public <A extends Appendable> A formatHex(A out, byte[] bytes)
Appendable
. Each byte value is formatted as the prefix, two hexadecimal characters selected from uppercase or lowercase digits, and the suffix. A delimiter follows each formatted value, except the last. The formatted hexadecimal strings are appended in zero or more calls to the Appendable
methods.- Type Parameters:
-
A
- The type ofAppendable
- Parameters:
-
out
- anAppendable
, non-null -
bytes
- a byte array - Returns:
- the
Appendable
- Throws:
-
UncheckedIOException
- if an I/O exception occurs appending to the output
formatHex
public <A extends Appendable> A formatHex(A out, byte[] bytes, int fromIndex, int toIndex)
Appendable
. Each byte value is formatted as the prefix, two hexadecimal characters selected from uppercase or lowercase digits, and the suffix. A delimiter follows each formatted value, except the last. The formatted hexadecimal strings are appended in zero or more calls to the Appendable
methods.- Type Parameters:
-
A
- The type ofAppendable
- Parameters:
-
out
- anAppendable
, non-null -
bytes
- a byte array, non-null -
fromIndex
- the initial index of the range, inclusive -
toIndex
- the final index of the range, exclusive. - Returns:
- the
Appendable
- Throws:
-
IndexOutOfBoundsException
- if the array range is out of bounds -
UncheckedIOException
- if an I/O exception occurs appending to the output
parseHex
public byte[] parseHex(CharSequence string)
- Parameters:
-
string
- a string containing the byte values with prefix, hexadecimal digits, suffix, and delimiters - Returns:
- a byte array with the values parsed from the string
- Throws:
-
IllegalArgumentException
- if the prefix or suffix is not present for each byte value, the byte values are not hexadecimal characters, or if the delimiter is not present after all but the last byte value
parseHex
public byte[] parseHex(CharSequence string, int fromIndex, int toIndex)
- Parameters:
-
string
- a string range containing hexadecimal digits, delimiters, prefix, and suffix. -
fromIndex
- the initial index of the range, inclusive -
toIndex
- the final index of the range, exclusive. - Returns:
- a byte array with the values parsed from the string range
- Throws:
-
IllegalArgumentException
- if the prefix or suffix is not present for each byte value, the byte values are not hexadecimal characters, or if the delimiter is not present after all but the last byte value -
IndexOutOfBoundsException
- if the string range is out of bounds
parseHex
public byte[] parseHex(char[] chars, int fromIndex, int toIndex)
- Parameters:
-
chars
- a character array range containing an even number of hexadecimal digits, delimiters, prefix, and suffix. -
fromIndex
- the initial index of the range, inclusive -
toIndex
- the final index of the range, exclusive. - Returns:
- a byte array with the values parsed from the character array range
- Throws:
-
IllegalArgumentException
- if the prefix or suffix is not present for each byte value, the byte values are not hexadecimal characters, or if the delimiter is not present after all but the last byte value -
IndexOutOfBoundsException
- if the character array range is out of bounds
toLowHexDigit
public char toLowHexDigit(int value)
isUpperCase()
is true
the character returned for values 10-15
is uppercase "A-F"
, otherwise the character returned is lowercase "a-f"
. The values in the range 0-9
are returned as "0-9"
.- Parameters:
-
value
- a value, only the low 4 bits0-3
of the value are used - Returns:
- the hexadecimal character for the low 4 bits
0-3
of the value
toHighHexDigit
public char toHighHexDigit(int value)
isUpperCase()
is true
the character returned for values 10-15
is uppercase "A-F"
, otherwise the character returned is lowercase "a-f"
. The values in the range 0-9
are returned as "0-9"
.- Parameters:
-
value
- a value, only bits4-7
of the value are used - Returns:
- the hexadecimal character for the bits
4-7
of the value
toHexDigits
public <A extends Appendable> A toHexDigits(A out, byte value)
Appendable
. Each nibble (4 bits) from most significant to least significant of the value is formatted as if by toLowHexDigit(nibble)
. The hexadecimal characters are appended in one or more calls to the Appendable
methods. The delimiter, prefix and suffix are not used.- Type Parameters:
-
A
- The type ofAppendable
- Parameters:
-
out
- anAppendable
, non-null -
value
- a byte value - Returns:
- the
Appendable
- Throws:
-
UncheckedIOException
- if an I/O exception occurs appending to the output
toHexDigits
public String toHexDigits(byte value)
byte
value. Each nibble (4 bits) from most significant to least significant of the value is formatted as if by toLowHexDigit(nibble)
. The delimiter, prefix and suffix are not used.- Parameters:
-
value
- a byte value - Returns:
- the two hexadecimal characters for the byte value
toHexDigits
public String toHexDigits(char value)
char
value. Each nibble (4 bits) from most significant to least significant of the value is formatted as if by toLowHexDigit(nibble)
. The delimiter, prefix and suffix are not used.- Parameters:
-
value
- achar
value - Returns:
- the four hexadecimal characters for the
char
value
toHexDigits
public String toHexDigits(short value)
short
value. Each nibble (4 bits) from most significant to least significant of the value is formatted as if by toLowHexDigit(nibble)
. The delimiter, prefix and suffix are not used.- Parameters:
-
value
- ashort
value - Returns:
- the four hexadecimal characters for the
short
value
toHexDigits
public String toHexDigits(int value)
int
value. Each nibble (4 bits) from most significant to least significant of the value is formatted as if by toLowHexDigit(nibble)
. The delimiter, prefix and suffix are not used.- Parameters:
-
value
- anint
value - Returns:
- the eight hexadecimal characters for the
int
value - See Also:
toHexDigits
public String toHexDigits(long value)
long
value. Each nibble (4 bits) from most significant to least significant of the value is formatted as if by toLowHexDigit(nibble)
. The delimiter, prefix and suffix are not used.- Parameters:
-
value
- along
value - Returns:
- the sixteen hexadecimal characters for the
long
value - See Also:
toHexDigits
public String toHexDigits(long value, int digits)
long
value. Each nibble (4 bits) from most significant to least significant of the value is formatted as if by toLowHexDigit(nibble)
. The delimiter, prefix and suffix are not used.- Parameters:
-
value
- along
value -
digits
- the number of hexadecimal digits to return, 0 to 16 - Returns:
- the hexadecimal characters for the
long
value - Throws:
-
IllegalArgumentException
- ifdigits
is negative or greater than 16
isHexDigit
public static boolean isHexDigit(int ch)
true
if the character is a valid hexadecimal character or codepoint. The valid hexadecimal characters are: -
'0' ('\u0030')
through'9' ('\u0039')
inclusive, -
'A' ('\u0041')
through'F' ('\u0046')
inclusive, and -
'a' ('\u0061')
through'f' ('\u0066')
inclusive.
- Parameters:
-
ch
- a codepoint - Returns:
-
true
if the character is valid a hexadecimal character, otherwisefalse
fromHexDigit
public static int fromHexDigit(int ch)
-
(ch - '0')
for'0'
through'9'
inclusive, -
(ch - 'A' + 10)
for'A'
through'F'
inclusive, and -
(ch - 'a' + 10)
for'a'
through'f'
inclusive.
- Parameters:
-
ch
- a character or codepoint - Returns:
- the value
0-15
- Throws:
-
NumberFormatException
- if the codepoint is not a hexadecimal character
fromHexDigits
public static int fromHexDigits(CharSequence string)
int
value parsed from a string of up to eight hexadecimal characters. The hexadecimal characters are parsed from most significant to least significant using fromHexDigit(int)
to form an unsigned value. The value is zero extended to 32 bits and is returned as an int
.- API Note:
-
Integer.parseInt(s, 16)
andInteger.parseUnsignedInt(s, 16)
are similar but allow all Unicode hexadecimal digits defined byCharacter.digit(ch, 16)
.HexFormat
uses only hexadecimal characters"0-9"
,"A-F"
and"a-f"
. Signed hexadecimal strings can be parsed withInteger.parseInt(String, int)
. - Parameters:
-
string
- a CharSequence containing up to eight hexadecimal characters - Returns:
- the value parsed from the string
- Throws:
-
IllegalArgumentException
- if the string length is greater than eight (8) or if any of the characters is not a hexadecimal character
fromHexDigits
public static int fromHexDigits(CharSequence string, int fromIndex, int toIndex)
int
value parsed from a string range of up to eight hexadecimal characters. The characters in the range fromIndex
to toIndex
, exclusive, are parsed from most significant to least significant using fromHexDigit(int)
to form an unsigned value. The value is zero extended to 32 bits and is returned as an int
.- API Note:
-
Integer.parseInt(s, 16)
andInteger.parseUnsignedInt(s, 16)
are similar but allow all Unicode hexadecimal digits defined byCharacter.digit(ch, 16)
.HexFormat
uses only hexadecimal characters"0-9"
,"A-F"
and"a-f"
. Signed hexadecimal strings can be parsed withInteger.parseInt(String, int)
. - Parameters:
-
string
- a CharSequence containing the characters -
fromIndex
- the initial index of the range, inclusive -
toIndex
- the final index of the range, exclusive. - Returns:
- the value parsed from the string range
- Throws:
-
IndexOutOfBoundsException
- if the range is out of bounds for theCharSequence
-
IllegalArgumentException
- if length of the range is greater than eight (8) or if any of the characters is not a hexadecimal character
fromHexDigitsToLong
public static long fromHexDigitsToLong(CharSequence string)
fromHexDigit(int)
to form an unsigned value. The value is zero extended to 64 bits and is returned as a long
.- API Note:
-
Long.parseLong(s, 16)
andLong.parseUnsignedLong(s, 16)
are similar but allow all Unicode hexadecimal digits defined byCharacter.digit(ch, 16)
.HexFormat
uses only hexadecimal characters"0-9"
,"A-F"
and"a-f"
. Signed hexadecimal strings can be parsed withLong.parseLong(String, int)
. - Parameters:
-
string
- a CharSequence containing up to sixteen hexadecimal characters - Returns:
- the value parsed from the string
- Throws:
-
IllegalArgumentException
- if the string length is greater than sixteen (16) or if any of the characters is not a hexadecimal character
fromHexDigitsToLong
public static long fromHexDigitsToLong(CharSequence string, int fromIndex, int toIndex)
fromIndex
to toIndex
, exclusive, are parsed from most significant to least significant using fromHexDigit(int)
to form an unsigned value. The value is zero extended to 64 bits and is returned as a long
.- API Note:
-
Long.parseLong(s, 16)
andLong.parseUnsignedLong(s, 16)
are similar but allow all Unicode hexadecimal digits defined byCharacter.digit(ch, 16)
.HexFormat
uses only hexadecimal characters"0-9"
,"A-F"
and"a-f"
. Signed hexadecimal strings can be parsed withLong.parseLong(String, int)
. - Parameters:
-
string
- a CharSequence containing the characters -
fromIndex
- the initial index of the range, inclusive -
toIndex
- the final index of the range, exclusive. - Returns:
- the value parsed from the string range
- Throws:
-
IndexOutOfBoundsException
- if the range is out of bounds for theCharSequence
-
IllegalArgumentException
- if the length of the range is greater than sixteen (16) or if any of the characters is not a hexadecimal character
equals
public boolean equals(Object o)
true
if the other object is a HexFormat
with the same parameters.hashCode
public int hashCode()
HexFormat
.toString
public String toString()
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/HexFormat.html