/** * Substitutes each {@code %s} in {@code template} with an argument. These * are matched by position - the first {@code %s} gets {@code args[0]}, etc. * If there are more arguments than placeholders, the unmatched arguments will * be appended to the end of the formatted message in square braces. * * @param template a non-null string containing 0 or more {@code %s} * placeholders. * @param args the arguments to be substituted into the message * template. Arguments are converted to strings using * {@link String#valueOf(Object)}. Arguments can be null. */ public static String format(String template, Object... args) { template = String.valueOf(template); // null -> "null" // start substituting the arguments into the '%s' placeholders StringBuilder builder = new StringBuilder(template.length() + 16 * args.length); int templateStart = 0; int i = 0; while (i < args.length) { int placeholderStart = template.indexOf("%s", templateStart); if (placeholderStart == -1) { break; } builder.append(template.substring(templateStart, placeholderStart)); builder.append(args[i++]); templateStart = placeholderStart + 2; } builder.append(template.substring(templateStart)); // if we run out of placeholders, append the extra args in square braces if (i < args.length) { builder.append(" ["); builder.append(args[i++]); while (i < args.length) { builder.append(", "); builder.append(args[i++]); } builder.append(']'); } return builder.toString(); } public static void main(String[] args) { Stopwatch stopwatch = new Stopwatch(); stopwatch.start(); String result = Formatter.format("My name is: %s. I was start from: %s. ", "Sean", "25/05/2012", "another value here"); stopwatch.stop(); System.out.println(stopwatch.elapsedTime(TimeUnit.NANOSECONDS)); System.out.println(result); stopwatch.reset(); stopwatch.start(); result = String.format("My name is: %s. I was start from: %s.", "Sean", "25/05/2012", "another value here"); stopwatch.stop(); System.out.println(stopwatch.elapsedTime(TimeUnit.NANOSECONDS)); System.out.println(result); }
Wednesday, 5 September 2012
Java - better performance String formatter
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment