import java.io.PrintWriter; import java.io.StringWriter; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Enumeration; import java.util.Iterator; import java.util.List; import java.util.TreeSet; import java.util.Vector; public class Utils { /** * Creates a comma separated list of all values held in the given * collection. * * @since Ant 1.8.0 */ public static String flattenToString(Collection c) { Iterator iter = c.iterator(); boolean first = true; StringBuffer sb = new StringBuffer(); while (iter.hasNext()) { if (!first) { sb.append(","); } sb.append(String.valueOf(iter.next())); first = false; } return sb.toString(); } public static Iterator asIterator(final Enumeration e) { return new Iterator() { public boolean hasNext() { return e.hasMoreElements(); } public Object next() { return e.nextElement(); } public void remove() { throw new UnsupportedOperationException(); } }; } /** * Returns a collection containing all elements of the iterator. * * @since Ant 1.8.0 */ public static Collection asCollection(final Iterator iter) { List l = new ArrayList(); while (iter.hasNext()) { l.add(iter.next()); } return l; } public static int frequency(Collection c, Object o) { // same as Collections.frequency introduced with JDK 1.5 int freq = 0; if (c != null) { for (Iterator i = c.iterator(); i.hasNext();) { Object test = i.next(); if (o == null ? test == null : o.equals(test)) { freq++; } } } return freq; } /** the line separator for this OS */ public static final String LINE_SEP = System.getProperty("line.separator"); public static Vector lineSplit(String data) { return split(data, '/n'); } public static Vector split(String data, int ch) { Vector elems = new Vector(); int pos = -1; int i = 0; while ((pos = data.indexOf(ch, i)) != -1) { String elem = data.substring(i, pos); elems.addElement(elem); i = pos + 1; } elems.addElement(data.substring(i)); return elems; } public static String replace(String data, String from, String to) { StringBuffer buf = new StringBuffer(data.length()); int pos = -1; int i = 0; while ((pos = data.indexOf(from, i)) != -1) { buf.append(data.substring(i, pos)).append(to); i = pos + from.length(); } buf.append(data.substring(i)); return buf.toString(); } public static String getStackTrace(Throwable t) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw, true); t.printStackTrace(pw); pw.flush(); pw.close(); return sw.toString(); } public static boolean endsWith(StringBuffer buffer, String suffix) { if (suffix.length() > buffer.length()) { return false; } // this loop is done on purpose to avoid memory allocation performance // problems on various JDKs // StringBuffer.lastIndexOf() was introduced in jdk 1.4 and // implementation is ok though does allocation/copying // StringBuffer.toString().endsWith() does massive memory // allocation/copying on JDK 1.5 // See http://issues.apache.org/bugzilla/show_bug.cgi?id=37169 int endIndex = suffix.length() - 1; int bufferIndex = buffer.length() - 1; while (endIndex >= 0) { if (buffer.charAt(bufferIndex) != suffix.charAt(endIndex)) { return false; } bufferIndex--; endIndex--; } return true; } /** * xml does not do "c" like interpretation of strings. * i.e. /n/r/t etc. * this method processes /n, /r, /t, /f, // * also subs /s -> " /n/r/t/f" * a trailing '/' will be ignored * * @param input raw string with possible embedded '/'s * @return converted string * @since Ant 1.7 */ public static String resolveBackSlash(String input) { StringBuffer b = new StringBuffer(); boolean backSlashSeen = false; for (int i = 0; i < input.length(); ++i) { char c = input.charAt(i); if (!backSlashSeen) { if (c == '//') { backSlashSeen = true; } else { b.append(c); } } else { switch (c) { case '//': b.append((char)'//'); break; case 'n': b.append((char)'/n'); break; case 'r': b.append((char)'/r'); break; case 't': b.append((char)'/t'); break; case 'f': b.append((char)'/f'); break; case 's': b.append(" /t/n/r/f"); break; default: b.append(c); } backSlashSeen = false; } } return b.toString(); } public static String removeSuffix(String string, String suffix) { if (string.endsWith(suffix)) { return string.substring(0, string.length() - suffix.length()); } else { return string; } } public static String removePrefix(String string, String prefix) { if (string.startsWith(prefix)) { return string.substring(prefix.length()); } else { return string; } } /** * TODO 添加方法注释 * @param args */ public static void main(String[] args) { ArrayList al = new ArrayList(); al.add("sss"); al.add(new Date()); al.add("sss2"); TreeSet<String> ts = new TreeSet<String>(); ts.add("sss"); ts.add(String.valueOf(new Date())); ts.add("sss2"); //System.out.println(flattenToString(al)); //System.out.println(System.getProperty("line.separator")); System.out.println(resolveBackSlash("/nsssssss")); } }