lunes, noviembre 29, 2004

Formatos en Java con prinft

Con la nueva versión de Java tenemos acceso a un interpretador de formatos al estilo printf de C, mediante la clase Formatter. Es decir que con Java 5 podemos hacer lo siguiente:
Calendar c = new GregorianCalendar(1995, MAY, 23);

String s = String.format("Cumpleaños: %1$tm %1$te,%1$tY", c);
y obtener el resultado:
Cumpleaños: May 23, 1995
O utilizar directamente la clase Formatter:
StringBuilder sb = new StringBuilder();

Formatter formatter = new Formatter(sb, Locale.ES);
formatter.format("Diferencia desde la última
declaración: € %(,.2f", balanceDelta);
y obtener:
Diferencia desde la última declaración: € (6.217,58)
¿Pero que pasa si todavía no tenemos la posibilidad de utilizar Java 5? La respuesta pasa por utilizar alguna de las implementacíones disponibles en Java de printf.
Con las clases hechas por Henrik Bengtsson y disponibles en braju.com, podemos tener la misma funcionalidad:
Format.printf("%-15s %4d %6.2f%%\n", 

new Parameters("Donald Duck").add(58).add(97.983));
o
Format.printf("%-15s %4d %6.2f%%\n", new Object[]{"Donald Duck", 

new Integer(58), new Double(97.983)});
y obtener en ambos casos
Donald Duck       58  97.98%
Otra biblioteca disponible es Lava3 Printf, con similares funcionalidades.

Tanto para que nuestras salidas por consola sean mucho mas legibles como para escribir en ficheros de columnas fijas, printf es un método que se hechaba en falta pero ahora tenemos disponible en Java 5. Mientras tanto, las implementaciones disponibles en la web son mas que suficientes y ofrecen una excelente performance.