Menu

Formato de cadenas en Java: String.format, printf y especificadores de formato

Cómo dar formato a cadenas en Java con String.format y printf: los especificadores de formato para números, relleno, decimales, además de los text blocks y el método formatted.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Dos formas de dar formato

Java da formato a las cadenas a partir de una plantilla que contiene especificadores de formato (los marcadores %) más los valores que se insertan. Hay dos puntos de entrada y comparten una sintaxis idéntica:

  • String.format(template, values...) devuelve un nuevo String.
  • System.out.printf(template, values...) imprime el resultado directamente.

Ambas producen el mismo texto. String.format te lo devuelve para que puedas almacenarlo; printf lo escribe en la consola. Observa el %n al final de la plantilla de printf: es el salto de línea independiente de la plataforma (prefiérelo sobre \n en las cadenas de formato).

Los especificadores más comunes

Cada especificador empieza con % y termina con una letra que indica qué tipo de valor se espera:

Los tres de uso diario son %s (cualquier valor, mediante su toString), %d (números enteros) y %f (decimales). Usa %% para imprimir un signo de porcentaje literal. Pasar el tipo equivocado —por ejemplo, un String a %d— lanza una IllegalFormatConversionException en tiempo de ejecución.

Controlar las posiciones decimales

%f usa por defecto seis decimales, que rara vez es lo que quieres. Pon .N antes de la f para fijar la precisión (el valor se redondea):

Añade el indicador de coma para los separadores de agrupación en números grandes:

Ancho y relleno

Un número entre el % y la letra del tipo establece un ancho mínimo de campo, rellenando con espacios para que las columnas se alineen. Un - inicial alinea a la izquierda; un 0 inicial rellena los números con ceros:

Esto es lo que hace legibles las tablas formateadas y los informes alineados:

El %-8s alinea los nombres a la izquierda en una columna de 8 de ancho y %5d alinea las puntuaciones a la derecha en una columna de 5 de ancho, de modo que los números quedan alineados sin importar la cantidad de dígitos.

Orden de los argumentos

De forma predeterminada, los especificadores consumen los valores de izquierda a derecha. Puedes repetir o reordenar un valor con N$ (índice basado en uno), útil cuando el mismo valor aparece dos veces:

%1$s se refiere al primer argumento las dos veces, por lo que echo se imprime dos veces.

El método formatted()

Desde Java 15, toda cadena tiene un método de instancia formatted: el mismo motor que String.format, solo que escrito como una llamada de método sobre la plantilla:

Combina especialmente bien con los text blocks (cadenas multilínea entre comillas triples) al construir salidas formateadas más grandes.

Cuándo no usar String.format

Para uniones sencillas y puntuales, la concatenación simple con + es más clara y rápida:

String greeting = "Hi, " + name + "!";   // simpler than String.format here

Recurre a String.format / printf cuando necesites formato de verdad —decimales fijos, relleno, alineación, agrupación— y no solo pegar un par de valores.

Siguiente: Operadores

Dar formato convierte valores en texto. Para calcular esos valores en primer lugar necesitas los operadores de Java: aritméticos, de comparación y lógicos. Esa es la siguiente página.

Preguntas frecuentes

¿Cómo se da formato a una cadena en Java?

Usa String.format(template, values...), que devuelve una nueva cadena con cada especificador de formato reemplazado por un valor: String.format("%s is %d", name, age). Para imprimir directamente en lugar de construir una cadena, usa System.out.printf(...) con la misma plantilla. Desde Java 15 también puedes llamar a template.formatted(values...).

¿Cómo se da formato a un número con dos decimales en Java?

Usa el especificador %.2f: String.format("%.2f", 3.14159) produce "3.14". El número que va tras el punto indica cuántos decimales conservar, y el valor se redondea. Para separadores de miles añade el indicador de coma: %,.2f da "1,234.57".

¿Cuál es la diferencia entre String.format y printf en Java?

Usan exactamente los mismos especificadores de formato. String.format(...) devuelve el texto formateado como un nuevo String que puedes almacenar o pasar de un lado a otro. System.out.printf(...) escribe el texto formateado directamente en la salida estándar y no devuelve nada útil. Usa String.format para construir una cadena y printf para imprimir una.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR