<snip>
private static final String[] HEX_STRING_VALUES = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "A", "B", "C", "D", "E", "F"};
</snip>
That one is sad, took me about 2 seconds to figure it out, and I haven't written code in about 3 years. The loop is right, but they are not making sure that sb is an empty string, not sure how StringBuilder works in this particular instance, but
StringBuilder sb = new StringBuilder(""); // passes an empty char string
would probably work, or adding the line:
sb = ""; // set sb to be equal to an empty char string, the overload of = should let this work
should also work, this is pretty basic stuff, although it is a very common bug.