CodeGym /Cursos /JAVA 25 SELF /Formateo de cadenas

Formateo de cadenas

JAVA 25 SELF
Nivel 9, Lección 2
Disponible

1. El problema de la concatenación manual

Si solo hay que mostrar una o dos variables, el operador + es realmente cómodo. Pero cuando hay muchos datos, la concatenación se convierte rápido en un caos, especialmente si hace falta formatear números (por ejemplo, 2 decimales) o saltos de línea.

String name = "Oleg";
int age = 25;
double balance = 12345.67;

System.out.println("Nombre: " + name + ", edad: " + age + ", saldo: " + balance + " euros.");

Intentar «mejorar» el formateo dentro de la concatenación solo empeora la legibilidad:

System.out.println("Nombre: " + name + ", edad: " + age + ", saldo: " + String.format("%.2f", balance) + " euros.");

Conclusión: la concatenación simple está bien para cosas pequeñas, pero para mensajes complejos hace falta una herramienta más potente — String.format().

2. String.format: formatea cadenas de forma profesional

El método String.format() permite crear una cadena a partir de una plantilla e insertar valores en las posiciones indicadas.

Forma general:

String result = String.format("Plantilla", values);
  • %s — cadena
  • %d — entero
  • %f — número de coma flotante
  • %n — salto de línea (multiplataforma)
String name = "Oleg";
int age = 25;
double balance = 12345.6789;

String info = String.format("Nombre: %s, edad: %d, saldo: %.2f euros.", name, age, balance);
System.out.println(info);
// Mostrará: Nombre: Oleg, edad: 25, saldo: 12345.68 euros.

String result = String.format("Nombre: %s, edad: %d, saldo: %.2f euros", name, age, balance);
// %s — cadena, %d — entero, %.2f — número con 2 decimales

Formateo de números y cadenas

Números decimales con precisión fija:

double price = 99.999;
System.out.println(String.format("Precio: %.2f euros.", price)); // Precio: 100.00 euros.

Ancho de campo y alineación:

int n = 7;
System.out.println(String.format("Número: [%5d]", n));   // Número: [    7]
System.out.println(String.format("Número: [%-5d]", n));  // Número: [7    ]

[5d] — ancho de campo 5, alineación a la derecha por defecto;
[-5d] — ancho de campo 5, alineación a la izquierda.

Cadenas con alineación:

String text = "Java";
System.out.println(String.format("[%10s]", text));  // [      Java]
System.out.println(String.format("[%-10s]", text)); // [Java      ]

Porcentajes:

double percent = 0.125;
System.out.println(String.format("Listo: %.1f%%", percent * 100)); // Listo: 12.5%

Para imprimir el símbolo de porcentaje, usa %%.

Formateo de fechas (breve)

import java.util.Date;
Date now = new Date();
System.out.println(String.format("Hoy: %tD", now)); // Hoy: 06/18/24
System.out.println(String.format("Hora: %tT", now));   // Hora: 15:42:07

Localización y separadores

Por defecto se utiliza la configuración regional del sistema. Para indicar la tuya (por ejemplo, la coma como separador decimal), pasa una configuración regional — por ejemplo, Locale.FRANCE.

import java.util.Locale;
double price = 1234.56;
System.out.println(String.format(Locale.FRANCE, "%.2f", price)); // 1234,56

Ejemplos prácticos

Ejemplo 1: informe breve

String name = "Anna";
int tasks = 5;
double hours = 12.3456;

String report = String.format(
    "Empleado: %s%nTareas realizadas: %d%nHoras invertidas: %.1f",
    name, tasks, hours
);
System.out.println(report);

/* Salida:
Empleado: Anna
Tareas realizadas: 5
Horas invertidas: 12.3
*/

Ejemplo 2: tabla con alineación

String header = String.format("%-10s | %5s | %8s", "Nombre", "Puntos", "Tiempo");
String row1 = String.format("%-10s | %5d | %8.2f", "Oleg", 95, 10.5);
String row2 = String.format("%-10s | %5d | %8.2f", "Anna", 100, 9.75);

System.out.println(header);
System.out.println(row1);
System.out.println(row2);

/* Salida:
Nombre      | Puntos |   Tiempo
Oleg        |    95 |    10.50
Anna        |   100 |     9.75
*/

Ejemplo 3: texto mixto

int apples = 12;
int pears = 8;
System.out.println(String.format("Tengo %d manzanas y %d peras.", apples, pears));

3. Práctica: formateo de cadenas en nuestra aplicación

Añadamos formateo a una aplicación de consola: saldo siempre con dos decimales y saltos de línea con %n.

Scanner console = new Scanner(System.in);

System.out.print("Introduce el nombre: ");
String name = console.nextLine();

System.out.print("Introduce la edad: ");
int age = console.nextInt();

System.out.print("Introduce el saldo: ");
double balance = console.nextDouble();

// Salida formateada
String info = String.format("Nombre: %s, edad: %d, saldo: %.2f euros.", name, age, balance);
System.out.println(info);

Prueba:

  • Introducir distintos valores y comprobar que el saldo siempre se muestra con dos decimales (%.2f).
  • Cambiar la plantilla para añadir saltos de línea con %n.

4. Errores típicos al formatear cadenas

Error n.º 1: desajuste entre tipos y marcadores.
No se puede pasar una cadena a %d ni un número a %s.

String.format("Edad: %d", "veinte"); // Error: se esperaba un número, se ha pasado una cadena

Error n.º 2: orden de argumentos incorrecto.
La plantilla es %s %d, pero pasaste primero un número y luego una cadena: obtendrás un error o una salida incorrecta.

Error n.º 3: ignorar la configuración regional.
Esperabas la coma como separador decimal pero ves el punto; indica la configuración regional adecuada explícitamente como primer parámetro de String.format(...).

Error n.º 4: símbolo de porcentaje sin escape.
Para mostrar el símbolo %, usa %%; de lo contrario, el formateo fallará con un error.

1
Tarea
JAVA 25 SELF, nivel 9, lección 2
Bloqueada
Salida formateada de nombre y edad
Salida formateada de nombre y edad
1
Tarea
JAVA 25 SELF, nivel 9, lección 2
Bloqueada
Formato de número de punto flotante
Formato de número de punto flotante
1
Tarea
JAVA 25 SELF, nivel 9, lección 2
Bloqueada
Formateo de tabla con alineación
Formateo de tabla con alineación
1
Tarea
JAVA 25 SELF, nivel 9, lección 2
Bloqueada
Formateo del informe con porcentaje y localización
Formateo del informe con porcentaje y localización
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION