Package com.pnfsoftware.jeb.util.format
Class Formatter
java.lang.Object
com.pnfsoftware.jeb.util.format.Formatter
A collection of binary and number formatting and escaping methods.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic voidaddCustomPrintableCharRange(int begin, int end, boolean printable) static CharSequencebyteArrayToHex(byte[] data) static CharSequencebyteArrayToHex(byte[] data, int pos, int end) Same asbyteArrayToHexString(byte[], int, int), but returns a rawCharSequencestatic CharSequencebyteArrayToHex(byte[] data, int pos, int end, boolean asciiString, int bytesPerLine) Return theStringhexadecimal representation of a byte array.static StringbyteArrayToHexString(byte[] data) static StringbyteArrayToHexString(byte[] data, int pos) static StringbyteArrayToHexString(byte[] data, int pos, int end) Return theStringhexadecimal representation of a byte array.static StringForce-escape a string to a sequence of\\ucharacter codes.static StringescapeByte(int ch) Convert a bytes to character such that a byte0xBBis converted to character», and escape the resulting character.static StringescapeBytes(byte[] bytes) Convert bytes to a string of characters such that a byte0xBBis converted to character», and escape the resulting string.static StringescapeBytes(byte[] bytes, int offset, int size) Convert bytes to a string of characters such that a byte0xBBis converted to character», and escape the resulting string.static StringescapeCharacter(char c) Escape a string, keeping unicode printable characters.static StringescapeCharacter(char c, boolean keepUnicodePrintables) Escape a character, if necessary.static StringEscape a string.static StringescapeString(CharSequence s, boolean keepUnicodePrintables) Escape a string.static StringescapeString(CharSequence s, int directionalityEnclosure, boolean keepUnicodePrintables, Set<Character> doNotEscapeList) Escape aCharSequence.static StringescapeToJavaStringArray(Collection<? extends Object> objects) This handy method takes a collection of N objects as input and generates the string representation a string array containing N strings, each of which being theescapedtoString() representation of the collection elements.static CharSequenceformatBinaryBlock(byte[] data) Format a block of bytes.static CharSequenceformatBinaryBlock(byte[] data, int offset, int size) Format a block of bytes.static CharSequenceformatBinaryBlock(byte[] data, int offset, int size, int offsetDelta) Format a block of bytes.static CharSequenceformatBinaryBlock(byte[] data, int offset, int size, long offsetDelta, boolean is64bit) Format a block of bytes as a buffer of hexadecimal lines.static CharSequenceformatBinaryLine(byte[] data) Format a block of bytes.static CharSequenceformatBinaryLine(byte[] data, int offset, int size) Format a block of bytes.static CharSequenceformatBinaryLine(byte[] data, int offset, int size, int minVirtualSize) Format a block of bytes as a hexadecimalCharSequencerepresentation.static CharSequenceformatBinaryLine(byte[] data, int offset, int size, int minVirtualSize, boolean separateWithSpace) static CharSequenceformatBinaryLineTruncate(byte[] data, int offset, int size, int fixedCount) static CharSequenceformatBinaryLineTruncate(byte[] data, int offset, int size, int maxSize, char truncateChar) static StringformatHexNumbers(Collection<? extends Number> list) static StringformatNumbers(Collection<? extends Number> list, int base, String pfx, String sfx) static byte[]Convert a series of hexadecimal String to a byte array.static byte[]hexStringToByteArray(String s, int pos, int end) Convert a series of hexadecimal String to a byte array.static StringhtmlEscape(String str) Escape HTML 4 entities by their&xxx;equivalents.static StringhtmlEscape(String str, boolean replaceNewlinesByBR) Escape HTML 4 entities by their&xxx;equivalents.static StringintegerToAlphaString(int n) Convert an integer to an alphabetic string, using the following pattern:static booleanisPrintableChar(char c) Determine if a character is printable.static voidstatic StringtoHexString(byte v, boolean upperCase) Convert a byte to its hex representation.static StringtoHexString(byte v, boolean upperCase, int padZero) Convert a byte to its hex representation.static StringtoHexString(int v, boolean upperCase) Convert an int to its hex representation.static StringtoHexString(int v, boolean upperCase, int padZero) Convert a int to its hex representation.static StringtoHexString(long v, boolean upperCase) Convert a long to its hex representation.static StringtoHexString(long v, boolean upperCase, int padZero) Convert a long to its hex representation.static StringtoHexString(short v, boolean upperCase) Convert a short to its hex representation.static StringtoHexString(short v, boolean upperCase, int padZero) Convert a short to its hex representation.static StringPretty-format any object, using aPrettyPrinterobject.static StringUnescape a string escaped with standard String-formatter backslash-based escape sequences.Word-wrap a string.
-
Constructor Details
-
Formatter
public Formatter()
-
-
Method Details
-
formatBinaryBlock
public static CharSequence formatBinaryBlock(byte[] data, int offset, int size, long offsetDelta, boolean is64bit) Format a block of bytes as a buffer of hexadecimal lines. Each line represents the 16 bytes of buffer data; it is prefixed by an optional offset (address) base and suffixed by the Ascii representation of the bytes. Note that non-printable, non-Ascii characters are represented as dots.- Parameters:
data- bytes bufferoffset- beginning of bytes sequence to be formattedsize- number of bytes to be formattedoffsetDelta- an offset deltais64bit- indicates if the prefix offset should be formatted as a 64-bit or 32-bit value- Returns:
- a formatted
CharSequence
-
formatBinaryBlock
Format a block of bytes. Same asformatBinaryBlock(data, offset, size, offsetDelta, false)- Parameters:
data-offset-size-offsetDelta-- Returns:
-
formatBinaryBlock
Format a block of bytes. Same asformatBinaryBlock(data, offset, size, 0)- Parameters:
data- bytes bufferoffset- beginning of bytes sequence to be formattedsize- number of bytes to be formatted- Returns:
- a formatted
CharSequence
-
formatBinaryBlock
Format a block of bytes. Same asformatBinaryBlock(data, 0, data.length)- Parameters:
data- bytes buffer- Returns:
- a formatted
CharSequence
-
formatBinaryLine
Format a block of bytes as a hexadecimalCharSequencerepresentation. Bytes will be represented space-separated.- Parameters:
data- bytes bufferoffset- beginning of bytes sequence to be formattedsize- number of bytes to be formattedminVirtualSize- minimum number of bytes that the resulting string is supposed to represent; phantom bytes (formatted as empty space) will be appended if necessary- Returns:
- a formatted
CharSequence
-
formatBinaryLine
public static CharSequence formatBinaryLine(byte[] data, int offset, int size, int minVirtualSize, boolean separateWithSpace) -
formatBinaryLine
Format a block of bytes. Same asformatBinaryLine(data, 0, size, size).- Parameters:
data-offset-size-- Returns:
-
formatBinaryLine
Format a block of bytes. Same asformatBinaryLine(data, 0, data.length, 0).- Parameters:
data- bytes buffer- Returns:
- a formatted string
-
formatBinaryLineTruncate
public static CharSequence formatBinaryLineTruncate(byte[] data, int offset, int size, int maxSize, char truncateChar) - Parameters:
data-offset-size-maxSize-truncateChar-- Returns:
-
formatBinaryLineTruncate
public static CharSequence formatBinaryLineTruncate(byte[] data, int offset, int size, int fixedCount) - Parameters:
data-offset-size-fixedCount-- Returns:
-
byteArrayToHex
- See Also:
-
byteArrayToHexString
- See Also:
-
byteArrayToHexString
- See Also:
-
byteArrayToHexString
Return theStringhexadecimal representation of a byte array. The hexadecimal part is returned as upper case.
For example:({10, 27, 56}, 0, 3) => "0A1B38" ({10, 27, 56}, 1, 2) => "1B"- Parameters:
data- byte array to convertpos- first byte positionend- last byte position (excluded)- Returns:
- the
Stringrepresentation
-
byteArrayToHex
Same asbyteArrayToHexString(byte[], int, int), but returns a rawCharSequence- Parameters:
data- byte array to convertpos- first byte positionend- last byte position (excluded)- Returns:
- the
CharSequencerepresentation - See Also:
-
byteArrayToHex
public static CharSequence byteArrayToHex(byte[] data, int pos, int end, boolean asciiString, int bytesPerLine) Return theStringhexadecimal representation of a byte array. The hexadecimal part is returned as upper case.- Parameters:
data- byte array to convertpos- first byte positionend- last byte position (excluded)asciiString- When true, return the hexadecimal along with its readable ascii characters (otherwise, seebyteArrayToHex(byte[], int, int)For example:({10, 74, 101, 98}, 0, 4, true, 0x10) => "0A4A6562" .JebbytesPerLine- maximum number of bytes per line for hexadecimal representation- Returns:
- the
CharSequencerepresentation
-
hexStringToByteArray
Convert a series of hexadecimal String to a byte array. Input must be padded with zeroes. If data is invalid, a null array is returned.hexStringToByteArray("1234ABCD", 0, 8) => {0x12, 0x23, 0xAB, 0xCD} hexStringToByteArray("1234ABCD", 0, 4) => {0x12, 0x23} hexStringToByteArray("1234ABCD", 0, 5) => null- Parameters:
s- Input Stringpos- the start parsing positionend- the end parsing position- Returns:
- the byte array
-
hexStringToByteArray
Convert a series of hexadecimal String to a byte array. Remove potential "h" suffix and "0x" prefix.- Parameters:
s- Input String- Returns:
- the byte array
-
addCustomPrintableCharRange
public static void addCustomPrintableCharRange(int begin, int end, boolean printable) - Parameters:
begin- start character, includedend- end character, excludedprintable-
-
resetCustomPrintableCharRanges
public static void resetCustomPrintableCharRanges() -
isPrintableChar
public static boolean isPrintableChar(char c) Determine if a character is printable. By default, this method defines a character as `printable` if and only if:
1- it is not an ISO control character
2- it is not a surrogate (low or high)
3- it is not a special character (block: SPECIAL)
4- it is not a modifier character (categories: MODIFIER_LETTER, MODIFIER_SYMBOL)
Tests 1 and 2 are always verified by this method (i.e. control chars and surrogate and NOT considered printable).
Tests 3 and 4 can be globally bypassed and customized via viaaddCustomPrintableCharRange(char, char, boolean)andresetCustomPrintableCharRanges().- Parameters:
c- the input character- Returns:
- true if the character is printable
-
escapeCharacter
Escape a character, if necessary.- Parameters:
c- the character to be escapedkeepUnicodePrintables- if true, a printable unicode, non-ascii character will be left unescaped- Returns:
- a string representing the escaped character
-
escapeCharacter
Escape a string, keeping unicode printable characters.- Parameters:
c-- Returns:
-
escapeString
Escape a string. Unicode printable characters are not escaped (refer toisPrintableChar(char)).- Parameters:
s- aCharSequence- Returns:
- the escaped string
-
escapeString
Escape a string.- Parameters:
s- aCharSequencekeepUnicodePrintables- if true, unicode printable characters are not escaped (refer toisPrintableChar(char)).- Returns:
- the escaped string
-
escapeString
public static String escapeString(CharSequence s, int directionalityEnclosure, boolean keepUnicodePrintables, Set<Character> doNotEscapeList) Escape aCharSequence.- Parameters:
s- theCharSequenceto be escapeddirectionalityEnclosure- if non-0, a string containing RTL (right-to-left) characters will be enclosed in special Unicode characters to force directionality when embedding the string into another string:
- -1: nothing added, nothing changed
- 0: nothing added, directionality when embedding will be determined from the string and its context (keepUnicodePrintables will be reset to false if RTL chars are detected)
- 1: force left-to-right for embedding
- 2: force right-to-left for embeddingkeepUnicodePrintables- if true, unicode printable characters are not escaped (refer toisPrintableChar(char)), eg, KCJ/Russian/etc. character setsdoNotEscapeList- optional collection of characters that won't be escaped- Returns:
- the escaped string
-
unescapeString
Unescape a string escaped with standard String-formatter backslash-based escape sequences.- Parameters:
s- an escaped string, allowed escapes: \\ \' \" \n \r \t \b \f \u???? \x??- Returns:
- the unescaped string
- Throws:
ParseException- if an error occurs
-
escapeAllCharacters
Force-escape a string to a sequence of\\ucharacter codes. All characters, regardless of theirprintability, are escaped.- Parameters:
s- a string- Returns:
- the escaped string
-
escapeToJavaStringArray
This handy method takes a collection of N objects as input and generates the string representation a string array containing N strings, each of which being theescapedtoString() representation of the collection elements.- Parameters:
objects- a collection of any objects- Returns:
- the string representation of a string array
-
escapeBytes
Convert bytes to a string of characters such that a byte0xBBis converted to character», and escape the resulting string. Only ascii-printable chars will be left unescaped, all other characters will be escaped.- Parameters:
bytes- bytes arrayoffset- start indexsize- count of bytes to escape- Returns:
- the escaped string
-
escapeBytes
Convert bytes to a string of characters such that a byte0xBBis converted to character», and escape the resulting string. Only ascii-printable chars will be left unescaped, all other characters will be escaped.- Parameters:
bytes- bytes array- Returns:
- the escaped string
-
escapeByte
Convert a bytes to character such that a byte0xBBis converted to character», and escape the resulting character.- Parameters:
ch-- Returns:
-
formatHexNumbers
- Parameters:
list-- Returns:
-
formatNumbers
public static String formatNumbers(Collection<? extends Number> list, int base, String pfx, String sfx) - Parameters:
list-base-- Returns:
-
integerToAlphaString
Convert an integer to an alphabetic string, using the following pattern:a: 0 b: 1 ... z: 25 aa: 26 ... az: 51 ba: 52 ... zzz: 26-1+26*26 aaa: 26+26*26 ... aaaa: 26+26*26+26*26*26 ...
Negative numbers will generate a string prefixed by '-'.- Parameters:
n-- Returns:
-
toHexString
Convert a long to its hex representation.- Parameters:
v- long to convertupperCase- true if the hex must be in upper casepadZero- indicate the number of characters that will be output (will pad with zeroes)- Returns:
- The hex representation
-
toHexString
Convert a long to its hex representation.- Parameters:
v- long to convertupperCase- true if the hex must be in upper case- Returns:
- The hex representation
-
toHexString
Convert a int to its hex representation.- Parameters:
v- int to convertupperCase- true if the hex must be in upper casepadZero- indicate the number of characters that will be output (will pad with zeroes)- Returns:
- The hex representation
-
toHexString
Convert an int to its hex representation.- Parameters:
v- int to convertupperCase- true if the hex must be in upper case- Returns:
- The hex representation
-
toHexString
Convert a short to its hex representation.- Parameters:
v- short to convertupperCase- true if the hex must be in upper casepadZero- indicate the number of characters that will be output (will pad with zeroes)- Returns:
- The hex representation
-
toHexString
Convert a short to its hex representation.- Parameters:
v- short to convertupperCase- true if the hex must be in upper case- Returns:
- The hex representation
-
toHexString
Convert a byte to its hex representation.- Parameters:
v- byte to convertupperCase- true if the hex must be in upper casepadZero- indicate the number of characters that will be output (will pad with zeroes)- Returns:
- The hex representation
-
toHexString
Convert a byte to its hex representation.- Parameters:
v- byte to convertupperCase- true if the hex must be in upper case- Returns:
- The hex representation
-
htmlEscape
Escape HTML 4 entities by their&xxx;equivalents. Line-feeds are not replaced by the (unescaped)<br>tag.- Parameters:
str- the string to escape- Returns:
- the escaped string
-
htmlEscape
Escape HTML 4 entities by their&xxx;equivalents.- Parameters:
str- the string to escapereplaceNewlinesByBR- if true, line-feeds are replaced by the (unescaped)<br>tag- Returns:
- the escaped string
-
wordWrap
Word-wrap a string. The result is a list of (CR)LF-empty lines whose lengths are equal to the provided wrapping length, modulo the wrapping style.- Parameters:
str- the text buffer to be wrappedwrapLength- wrapping length, must be strictly positivewrapType- wrapping type:
0: strict (the wrapping length is not a hint, all lines will have the provided length, except for lines ending with a new-line character before the required limit; words may be cut)
-1: forbid length crossing (i.e. the wrapping length is a hard hint; favor shorter lines; words may be cut)
+1: allow length crossing (i.e. the wrapping length is a soft hint; favor longer lines)- Returns:
- an array of strings
-
toString
Pretty-format any object, using aPrettyPrinterobject. Elements of arrays, collections, and maps are rendered individually. For non-basic types,toStringis called. For maps, the key-value pairs are rendered one per line line. Indenting uses 2 white-space characters.- Parameters:
o- an object- Returns:
- a decent string representation of the object
-