/**
* 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