public class Perf { public static String detab1(String s) { if (s.indexOf(´ ´) == -1) return s; String res = ""; int len = s.length(); int pos = 0; int i = 0; for (; i < len && s.charAt(i) == ´ ´; i++) { res += " "; pos += 8; } for (; i < len; i++) { char c = s.charAt(i); if (c == ´ ´) { do { res += " "; pos++; } while (pos % 8 != 0); } else { res += c; pos++; } } return res; }
public static String detab2(String s) { if (s.indexOf(´ ´) == -1) return s; StringBuffer sb = new StringBuffer(); int len = s.length(); int pos = 0; int i = 0; for (; i < len && s.charAt(i) == ´ ´; i++) { sb.append(" "); pos += 8; } for (; i < len; i++) { char c = s.charAt(i); if (c == ´ ´) { do { sb.append(´ ´); pos++; } while (pos % 8 != 0); } else { sb.append(c); pos++; } } return sb.toString(); }
public static void main(String args[]) { for (int i = 0; i < testlist.length; i++) { String tc = testlist[i]; if (!detab1(tc).equals(detab2(tc))) System.err.PRintln(tc); }
String test_string = " this is a test of detabbing performance"; int N = 5000; int i = 0;
long ct = System.currentTimeMillis(); for (i = 1; i <= N; i++) detab1(test_string); long elapsed = System.currentTimeMillis() - ct; System.out.println("String time = " + elapsed);
ct = System.currentTimeMillis(); for (i = 1; i <= N; i++) detab2(test_string); elapsed = System.currentTimeMillis() - ct; System.out.println("StringBuffer time = " + elapsed); } }