Bỏ qua để đến nội dung

Định dạng xuất dữ liệu (printf/String.format)

printf cho phép in dữ liệu theo một định dạng (format string) với các placeholder, tương tự printf trong C:

String name = "An";
int age = 20;
double gpa = 8.75;
System.out.printf("Tên: %s, Tuổi: %d, GPA: %.2f%n", name, age, gpa);
// Tên: An, Tuổi: 20, GPA: 8.75
Specifier Ý nghĩa
%d số nguyên (int, long)
%f số thực (float, double)
%.2f số thực, làm tròn 2 chữ số thập phân
%s chuỗi (String) - thực ra dùng được cho hầu hết mọi kiểu (gọi toString())
%c ký tự (char)
%b boolean
%n xuống dòng (nên dùng thay cho \n - %n tự chọn ký tự xuống dòng đúng theo hệ điều hành)
%% in ký tự %

Thêm một số trước ký tự định dạng để chỉ định độ rộng tối thiểu; thêm dấu - để căn trái:

System.out.printf("%10s|%n", "abc"); // " abc|" - căn phải, rộng 10 ký tự
System.out.printf("%-10s|%n", "abc"); // "abc |" - căn trái, rộng 10 ký tự
System.out.printf("%5d|%n", 42); // " 42|"
System.out.printf("%05d|%n", 42); // "00042|" - đệm số 0

Thường dùng để in bảng dữ liệu thẳng hàng:

System.out.printf("%-10s%5s%n", "Tên", "Điểm");
System.out.printf("%-10s%5.1f%n", "An", 8.5);
System.out.printf("%-10s%5.1f%n", "Binh", 7.25);

4. String.format - lấy chuỗi đã định dạng thay vì in luôn

Phần tiêu đề “4. String.format - lấy chuỗi đã định dạng thay vì in luôn”

String.format dùng cú pháp giống hệt printf, nhưng trả về một String thay vì in ra màn hình - hữu ích khi cần lưu lại chuỗi hoặc ghép vào thông báo khác:

String message = String.format("Xin chào %s, bạn %d tuổi.", "An", 20);
System.out.println(message); // Xin chào An, bạn 20 tuổi.

Với chuỗi văn bản dài, nhiều dòng, Java 15 trở lên hỗ trợ text block bằng ba dấu ngoặc kép """:

String html = """
<html>
<body>
<p>Xin chào!</p>
</body>
</html>
""";
System.out.println(html);

Text block giữ nguyên định dạng xuống dòng, không cần nối chuỗi + hay \n thủ công - rất tiện cho JSON mẫu, câu SQL, đoạn HTML ngắn…

  • printf/String.format định dạng dữ liệu xuất theo format specifier (%d, %f, %s,…)
  • Thêm số trước specifier để chỉ định độ rộng, dấu - để căn trái
  • String.format trả về String thay vì in trực tiếp
  • Text block (""") từ Java 15 giúp viết chuỗi nhiều dòng gọn và dễ đọc hơn