printf-java

Trong lập trình Java, rất thường xuyên bạn bắt gặp đoạn mã System.out.printf(..). Thực ra, phương thức printf(..) được định nghĩa trong cả hai lớp PrintStream và PrintWriter, cách sử dụng của chúng là tương tự nhau, printf là viết tắt của “Print + Format”.

Sử dụng System.out.printf

Sử dụng hàm printf() để định dạng chuỗi và hiển thị ra console.

Phương thức:

public void System.out.printf(String format, Object... args) public void System.out.printf(Locale locale, String format, Object... args)
Code language: JavaScript (javascript)

Trong đó:

  • locale : xác định locale được áp dụng trong phương thức format.
  • format : định dạng của chuỗi.
  • args : tham số trong chuỗi format, có thể không có hoặc có nhiều tham số.

Chuối format theo cấu trúc sau:

"% [argument index] [flag] [width] [.precision] type"
Code language: CSS (css)
  • % là một ký tự đặc biệt biểu thị rằng một hướng dẫn định dạng sau.
  • [argument index] : xác định chỉ số của các đối số để được định dạng. Nếu không xác định cụ thể, các đối số sẽ được định dạng theo thứ tự như chúng xuất hiện trong danh sách đối số.
  • [flag] là một hướng dẫn định dạng đặc biệt. Ví dụ, cờ + xác định rằng một giá trị số phải luôn luôn được định dạng với một ký hiệu, và cờ 0 chỉ định rằng 0 là ký tự đệm. Các cờ khác bao gồm  đó là pad ở bên phải, + pad ở bên trái (nếu đối tượng được định dạng là một chuỗi). Lưu ý rằng một số cờ không thể được kết hợp với một số cờ khác hoặc với các đối tượng được định dạng nhất định.
  • [width] xác định số lượng tối thiểu các ký tự output cho đối tượng đó.
  • [.precession] xác định chính xác của các số dấu chấm động trong output. Đó là cơ bản số chữ số thập phân bạn muốn in trên đầu ra. Nhưng nó có thể được sử dụng cho các loại khác để cắt giảm chiều rộng đầu ra
  • type : type và % là các tham số định dạng bắt buộc duy nhất. type là kiểu đối tượng sẽ được định dạng trong đầu ra. Đối với các số nguyên d, cho các chuỗi đó là s, cho các số dấu phẩy là f, cho các số nguyên có định dạng hex là x.

Ví dụ:

public class StringFormat { public static void main(String[] args) { System.out.printf("Integer : %d\n", 15); System.out.printf("Floating point number with 3 decimal digits: %.3f \n", 1.21312939123); System.out.printf("Floating point number with 8 decimal digits: %.8f \n", 1.21312939123); System.out.printf("String: %s, integer: %d, float: %.6f \n", "Hello World", 89, 9.231435); System.out.printf("Re-order output %4$2s %1$2s %3$2s %2$2s \n", "a", "b", "c", "d"); } }
Code language: JavaScript (javascript)

Output

Integer : 15 Floating point number with 3 decimal digits: 1.213 Floating point number with 8 decimal digits: 1.21312939 String: Hello World, integer: 89, float: 9.231435 Re-order output d a c b
Code language: CSS (css)

So sánh printf với println, print

Vậy, trong Java có tới 3 cách in ra màn hình thì nên chọn cái nào trong trường hợp nào cho phù hợp.

Để làm rõ điều này, chúng ta cùng điểm qua xem 3 anh em nhà đó khác nhau như thế nào:

  • Với Print: Xuất kết quả ra màn hình nhưng con trỏ chuột không xuống dòng.
  • Với Println: Xuất kết quả ra màn hình đồng thời con trỏ chuột nhảy xuống dòng tiếp theo.
  • Với Printf: Xuất ra màng hình kết quả đồng thời có thể định dạng được kết quả đó nhờ vào các đối số thích hợp.

Để thấy rõ sự khác nhau trên, chúng ta hãy làm thử một ví dụ nhỏ.

Chẳng hạn như in 2 câu: “Tôi yêu lập trình. Thích Java và uống cafe” hiển thị dưới dạng 2 dòng trên màn hình console.

Print:

public class Print { public static void main(String[] args) { System.out.print("Lập trình Java"); } }
Code language: PHP (php)


Println:

public class Println { public static void main(String[] args) { System.out.println("Lập trình Java"); } }
Code language: JavaScript (javascript)


Printf:

public class Printf { public static void main(String[] args) { System.out.printf("%s\n%s", "Tôi yêu lập trình.", "Thích Java và uống cafe."); } }
Code language: JavaScript (javascript)


Rõ ràng là Printf có gì đó đáp ứng nhiều nhu cầu cao hơn đúng không?

Ở đây chúng ta chỉ cần tập trung nhìn cho ra sự khác biệt giữa Printf với phần còn lại, đặc biệt là ở cú pháp – có gì đó quen thuộc với những ai đã từng làm việc với ngôn ngữ C.

Tổng kết

Thực tế là chúng ta có thể dùng Printf cho toàn bộ các hoạt động in dữ liệu ra màn hình, tuy nhiên, Print và Println vẫn nhanh hơn và phổ biến hơn trong các trường hợp dữ liệu không cần định dạng phức tạp.

Sau bài viết này, mình hi vọng các bạn sẽ có thể sử dụng được Printf trong Java một cách thành thạo và phục vụ tốt cho việc coding của mình. Chúc bạn học tốt!

Bài viết liên quan

Leave a Reply

Your email address will not be published.