/** Splits a backslash escaped string on the separator. * <p> * Current backslash escaping supported: * <br> \n \t \r \b \f are escaped the same as a Java String * <br> Other characters following a backslash are produced verbatim (\c => c) * * @param s the string to split * @param separator the separator to split on * @param decode decode backslash escaping */ public static List /*<String>*/ splitSmart(string s, string separator, bool decode) { ArrayList /*<String>*/ lst = new ArrayList/*<String>*/ (2); java.lang.StringBuilder sb = new java.lang.StringBuilder(); int pos = 0, end = s.Length; while (pos < end) { if (java.lang.String.instancehelper_startsWith(s, separator, pos)) { if (sb.length() > 0) { lst.add(sb.toString()); sb = new java.lang.StringBuilder(); } pos += separator.Length; continue; } char ch = s[pos++]; if (ch == '\\') { if (!decode) { sb.append(ch); } if (pos >= end) { break; // ERROR, or let it go? } ch = s[pos++]; if (decode) { switch (ch) { case 'n': ch = '\n'; break; case 't': ch = '\t'; break; case 'r': ch = '\r'; break; case 'b': ch = '\b'; break; case 'f': ch = '\f'; break; } } } sb.append(ch); } if (sb.length() > 0) { lst.add(sb.toString()); } return(lst); }
public static List /*<String>*/ splitWS(string s, bool decode) { ArrayList /*<String>*/ lst = new ArrayList/*<String>*/ (2); java.lang.StringBuilder sb = new java.lang.StringBuilder(); int pos = 0, end = s.Length; while (pos < end) { char ch = s[pos++]; if (java.lang.Character.isWhitespace(ch)) { if (sb.length() > 0) { lst.add(sb.toString()); sb = new java.lang.StringBuilder(); } continue; } if (ch == '\\') { if (!decode) { sb.append(ch); } if (pos >= end) { break; // ERROR, or let it go? } ch = s[pos++]; if (decode) { switch (ch) { case 'n': ch = '\n'; break; case 't': ch = '\t'; break; case 'r': ch = '\r'; break; case 'b': ch = '\b'; break; case 'f': ch = '\f'; break; } } } sb.append(ch); } if (sb.length() > 0) { lst.add(sb.toString()); } return(lst); }
public String(StringBuilder builder) { this.value = Arrays.copyOf(builder.getValue(), builder.length()); }