List of usage examples for java.lang StringBuilder appendCodePoint
@Override public StringBuilder appendCodePoint(int codePoint)
From source file:XmlNameEncoder.java
/** * {@inheritDoc}/*from w ww .jav a 2 s. c o m*/ * * @see org.jboss.dna.common.text.TextDecoder#decode(java.lang.String) */ public String decode(String encodedText) { if (encodedText == null) return null; if (encodedText.length() < 7) { // Not big enough to have an encoded sequence return encodedText; } StringBuilder sb = new StringBuilder(); char[] digits = new char[4]; CharacterIterator iter = new StringCharacterIterator(encodedText); for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) { if (c == '_') { // Read the next character, if there is one ... char next = iter.next(); if (next == CharacterIterator.DONE) { sb.append(c); break; } // If the next character is not 'x', then these are just regular characters ... if (next != 'x') { sb.append(c).append(next); continue; } // Read the next 4 characters (digits) and another '_' character ... digits[0] = iter.next(); if (digits[0] == CharacterIterator.DONE) { sb.append(c).append(next); break; } digits[1] = iter.next(); if (digits[1] == CharacterIterator.DONE) { sb.append(c).append(next).append(digits, 0, 1); break; } digits[2] = iter.next(); if (digits[2] == CharacterIterator.DONE) { sb.append(c).append(next).append(digits, 0, 2); break; } digits[3] = iter.next(); if (digits[3] == CharacterIterator.DONE) { sb.append(c).append(next).append(digits, 0, 3); break; } char underscore = iter.next(); if (underscore != '_') { // includes DONE sb.append(c).append(next).append(digits, 0, 4); if (underscore == CharacterIterator.DONE) break; sb.append(underscore); continue; } // We've read all 4 digits, including the trailing '_' // Now parse into the resulting character try { sb.appendCodePoint(Integer.parseInt(new String(digits), 16)); } catch (NumberFormatException e) { // code was not hexadecimal, so just write out the characters as is ... sb.append(c).append(next).append(digits).append(underscore); } } else { // Just append other characters ... sb.append(c); } } return sb.toString(); }