List of usage examples for java.text StringCharacterIterator StringCharacterIterator
public StringCharacterIterator(String text)
From source file:Base64.java
public static byte[] decodeXX(String s) { s = s.replaceAll("\r\n|\r|\n|\u2028|\u2029", "\n").trim(); if (s.startsWith("begin ") && s.endsWith("\nend")) { int o = s.indexOf('\n'); int e = s.length() - 4; s = s.substring(o, e).trim();//from w ww . j a va2s .com } CharacterIterator it = new StringCharacterIterator(s); ByteArrayOutputStream out = new ByteArrayOutputStream(); int i = 0, j = 0; for (char ch = it.first(); ch != CharacterIterator.DONE && ch != '+'; ch = it.next()) { if (xxd(ch) < 0) continue; while (true) { int v = xxd(it.next()); if (v >= 0) { i = (i << 6) | v; j++; if (j >= 4) { out.write(i >> 16); out.write(i >> 8); out.write(i); i = 0; j = 0; } } else { break; } } } switch (j) { case 3: out.write(i >> 10); out.write(i >> 2); break; case 2: out.write(i >> 4); break; } return out.toByteArray(); }
From source file:com.googlecode.jsonplugin.JSONWriter.java
/** * escape characters// ww w . java 2 s .co m */ private void string(Object obj) { this.add('"'); CharacterIterator it = new StringCharacterIterator(obj.toString()); for (char c = it.first(); c != CharacterIterator.DONE; c = it.next()) { if (c == '"') { this.add("\\\""); } else if (c == '\\') { this.add("\\\\"); } else if (c == '/') { this.add("\\/"); } else if (c == '\b') { this.add("\\b"); } else if (c == '\f') { this.add("\\f"); } else if (c == '\n') { this.add("\\n"); } else if (c == '\r') { this.add("\\r"); } else if (c == '\t') { this.add("\\t"); } else if (Character.isISOControl(c)) { this.unicode(c); } else { this.add(c); } } this.add('"'); }
From source file:com.itude.mobile.android.util.StringUtil.java
/** * See: http://www.javapractices.com/topic/TopicAction.do?Id=96 *//* www . j av a2 s. com*/ public static String escapeHtml(String html) { final StringBuilder escapedHtml = new StringBuilder(); final StringCharacterIterator iterator = new StringCharacterIterator(html); char character = iterator.current(); while (character != CharacterIterator.DONE) { if (character == '<') { escapedHtml.append("<"); } else if (character == '>') { escapedHtml.append(">"); } else if (character == '\"') { escapedHtml.append("""); } else if (character == '\'') { escapedHtml.append("'"); } else if (character == '&') { escapedHtml.append("&"); } else { //the char is not a special one //add it to the result as is escapedHtml.append(character); } character = iterator.next(); } return escapedHtml.toString(); }
From source file:org.rhq.enterprise.gui.legacy.action.resource.common.monitor.visibility.ViewChartAction.java
/** * Replace characters having special meaning <em>inside</em> HTML tags with * their escaped equivalents, using character entities such as * <tt>'&'</tt>./*from w w w .ja v a2 s. co m*/ * <P> * The escaped characters are : * <ul> * <li>< * <li>> * <li>" * <li>' * <li>\ * <li>& * </ul> * <P> * This method ensures that arbitrary text appearing inside a tag does not * "confuse" the tag. For example, <tt>HREF='Blah.do?Page=1&Sort=ASC'</tt> * does not comply with strict HTML because of the ampersand, and should be * changed to <tt>HREF='Blah.do?Page=1&Sort=ASC'</tt>. This is * commonly seen in building query strings. (In JSTL, the c:url tag performs * this task automatically.) * * @param aTagFragment * some HTML to be escaped * @return escaped HTML */ private static String forHTMLTag(String aTagFragment) { final StringBuffer result = new StringBuffer(); final StringCharacterIterator iterator = new StringCharacterIterator(aTagFragment); for (char character = iterator.current(); character != CharacterIterator.DONE; character = iterator .next()) { switch (character) { case '<': result.append("<"); break; case '>': result.append(">"); break; case '\"': result.append("""); break; case '\'': result.append("'"); break; case '\\': result.append("\"); break; case '&': result.append("&"); break; case '|': result.append("|"); break; case ',': result.append(","); break; default: // the char is not a special one add it to the result as is result.append(character); break; } } return result.toString(); }
From source file:org.apache.arrow.vector.util.Text.java
/** * For the given string, returns the number of UTF-8 bytes required to encode the string. * * @param string/*from ww w . j a va2 s . com*/ * text to encode * @return number of UTF-8 bytes required to encode */ public static int utf8Length(String string) { CharacterIterator iter = new StringCharacterIterator(string); char ch = iter.first(); int size = 0; while (ch != CharacterIterator.DONE) { if ((ch >= 0xD800) && (ch < 0xDC00)) { // surrogate pair? char trail = iter.next(); if ((trail > 0xDBFF) && (trail < 0xE000)) { // valid pair size += 4; } else { // invalid pair size += 3; iter.previous(); // rewind one } } else if (ch < 0x80) { size++; } else if (ch < 0x800) { size += 2; } else { // ch < 0x10000, that is, the largest char value size += 3; } ch = iter.next(); } return size; }
From source file:stg.utils.RandomStringGenerator.java
/** * Validates the given format./*w ww . j a v a 2 s. co m*/ * Valid characters are : * <li>a<dt>For lower case alphabets. * <li>A<dt>For upper case alphabets. * <li>9<dt>For numbers. * <li>#<dt>For special characters. * The format characters can be repeated in whatever sequence. * The random string generated will have the same length as that of the format. * * @param format */ private void validate(String format) { CharacterIterator iter = new StringCharacterIterator(format); char c = iter.first(); boolean constantStarted = false; while (c != CharacterIterator.DONE) { switch (c) { case ESCAPE: c = iter.next(); if (c == CharacterIterator.DONE) { throw new IllegalArgumentException( "Invalid format! Escape character found without any associated character that was to be escaped."); } break; case LOWER_CASE: break; case UPPER_CASE: break; case NUMBER: break; case SPECIAL: break; case START_CONSTANT: if (!constantStarted) constantStarted = true; break; case END_CONSTANT: if (constantStarted) constantStarted = false; break; default: if (!constantStarted) throw new IllegalArgumentException("Invalid format character found '" + c + "'"); } c = iter.next(); } }
From source file:Base64.java
public static byte[] decodeBinHex(String s) { // phase 1 - base64 encoding CharacterIterator it = new StringCharacterIterator(s.trim()); ByteArrayOutputStream iout = new ByteArrayOutputStream(); int i = 0, j = 0; char ch = it.first(); if (ch == ':') ch = it.next();//from w w w . j a v a 2 s . c o m while (ch != CharacterIterator.DONE && ch != ':') { int v = hqxd(ch); if (v >= 0) { i = (i << 6) | v; j++; if (j >= 4) { iout.write(i >> 16); iout.write(i >> 8); iout.write(i); i = 0; j = 0; } } ch = it.next(); } switch (j) { case 3: iout.write(i >> 10); iout.write(i >> 2); break; case 2: iout.write(i >> 4); break; } byte[] b = iout.toByteArray(); // phase 2 - RLE int off = 0; ByteArrayOutputStream out = new ByteArrayOutputStream(); byte last = 0; while (off < b.length) { byte v = b[off++]; if (v == (byte) 0x90 && off < b.length) { int r = b[off++] & 0xFF; if (r == 0) { out.write(last = (byte) 0x90); } else { r--; while (r-- > 0) { out.write(last); } } } else { out.write(last = v); } } return out.toByteArray(); }
From source file:de.innovationgate.utils.WGUtils.java
/** * Clears out "internal strings" from a text that contains some kind of * program code. I.e. if the text itself contains string delimiter * characters, like " or ', the contents between these characters is * regarded a string. Its contents will be cleared in the text version that * is returned by this method. This is useful to prepare a text for an * operation, that may not react on the contents of strings inside it. This * method regards the character \ as an escape sign for string delimiters. * So delimiter characters that are prefixed by a \ will be ignored. * //from ww w . ja v a2s . co m * @param colString * The text * @param stringDelimiter * The character that introduces and closes strings inside the * text * @param replaceChar * The character that is used to clear out strings. * @return The text with cleared out internal strings */ public static String clearStrings(String colString, char stringDelimiter, char replaceChar) { CharacterIterator it = new StringCharacterIterator(colString); StringBuffer out = new StringBuffer(); boolean inAString = false; char prevChar = ' '; for (char c = it.first(); c != CharacterIterator.DONE; c = it.next()) { // Look for string introducor if (c == stringDelimiter && prevChar != '\\') { inAString = !inAString; out.append(stringDelimiter); } else if (inAString) { out.append(replaceChar); } else { out.append(c); } prevChar = c; } return out.toString(); }
From source file:XmlNameEncoder.java
/** * {@inheritDoc}/*from ww w .j a v a2 s . com*/ * * @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(); }
From source file:expect4j.ExpectEmulation.java
public static String escape(final String value) { String raw = value;/*from w ww . j av a 2 s. com*/ boolean isString = false; if (value.indexOf('"') == 0 && value.lastIndexOf('"') == value.length() - 1) { isString = true; raw = value.substring(1, value.length() - 1); } final StringBuffer result = new StringBuffer(); StringCharacterIterator iterator = new StringCharacterIterator(raw); char character = iterator.current(); while (character != StringCharacterIterator.DONE) { /* * All literals need to have backslashes doubled. * &;`'"|*?~<>^()[]{}$\ */ switch (character) { case '&': case ';': case '\'': case '"': case '|': case '*': case '?': case '~': case '<': case '>': case '^': case '(': case ')': case '[': case ']': case '{': case '}': case '$': case '\\': result.append("\\"); default: result.append(character); } character = iterator.next(); } String clean = result.toString(); if (isString) clean = '"' + clean + '"'; return clean; }