private static final String encodeThreeOrMoreCharName(final String name) { int last = name.length() - 1; StringBuilder sb = new StringBuilder(last + 13); // reserve space // non space at start if (isNonSpace(name.charAt(0))) { sb.append(name.charAt(0)); } else { sb.append(ISO9075Encode(name.charAt(0))); } // char = nonspace | ' ' for (int i = 1; i < last; i++) { char c = name.charAt(i); if (c == ' ' || isNonSpace(c)) { sb.append(c); } else { sb.append(ISO9075Encode(c)); } } // non space at end if (isNonSpace(name.charAt(last))) { sb.append(name.charAt(last)); } else { sb.append(ISO9075Encode(name.charAt(last))); } return sb.toString(); }
private static final String encodeLocalName(final String localName) { if (localName.length() == 0) { throw new IllegalArgumentException("Local name part cannot be empty."); } else if (localName.length() == 1) { if (isNonSpace(localName.charAt(0))) { return localName; } else { return ISO9075Encode(localName.charAt(0)); } } else if (localName.length() == 2) { StringBuilder sb = new StringBuilder(); // unrolled loop if (isNonSpace(localName.charAt(0))) { sb.append(localName.charAt(0)); } else { sb.append(ISO9075Encode(localName.charAt(0))); } if (isNonSpace(localName.charAt(1))) { sb.append(localName.charAt(1)); } else { sb.append(ISO9075Encode(localName.charAt(1))); } return sb.toString(); } else { return encodeThreeOrMoreCharName(localName); } }