Dua Cara Memformat
Java memformat string dari sebuah template yang berisi format specifier (placeholder %) beserta nilai-nilai yang akan dimasukkan. Ada dua pintu masuk, dan sintaks keduanya identik:
String.format(template, values...)mengembalikanStringbaru.System.out.printf(template, values...)langsung mencetak hasilnya.
Keduanya menghasilkan teks yang sama. String.format mengembalikannya supaya bisa kamu simpan; printf menulisnya ke konsol. Perhatikan %n di akhir template printf: itu baris baru yang tidak bergantung pada platform (utamakan ini daripada \n di format string).
Specifier yang Umum
Setiap specifier diawali % dan diakhiri huruf yang menunjukkan jenis nilai yang diharapkan:
Tiga yang paling sering dipakai adalah %s (nilai apa pun, lewat toString-nya), %d (bilangan bulat), dan %f (bilangan desimal). Pakai %% untuk mencetak tanda persen apa adanya. Memberikan tipe yang salah, misalnya String ke %d, akan melempar IllegalFormatConversionException saat runtime.
Mengatur Jumlah Angka Desimal
Secara default %f menampilkan enam angka desimal, dan itu jarang sesuai keinginanmu. Taruh .N sebelum f untuk menetapkan presisinya (nilainya dibulatkan):
Tambahkan flag koma untuk pemisah kelompok angka pada bilangan besar:
Lebar dan Padding
Angka di antara % dan huruf tipe menetapkan lebar minimum kolom, dengan spasi sebagai pengisi supaya kolom-kolomnya sejajar. - di depan membuat rata kiri; 0 di depan mengisi angka dengan nol:
Inilah yang membuat tabel berformat dan laporan yang rapi enak dibaca, terutama saat kamu mencetak setiap baris di dalam for loop:
%-8s membuat nama rata kiri di kolom selebar 8, dan %5d membuat skor rata kanan di kolom selebar 5, jadi angka-angkanya sejajar berapa pun jumlah digitnya.
Urutan Argumen
Secara default, specifier mengambil nilai dari kiri ke kanan. Kamu bisa mengulang atau mengubah urutan nilai dengan N$ (indeks mulai dari satu), berguna saat nilai yang sama muncul dua kali:
%1$s merujuk ke argumen pertama dua kali, jadi echo dicetak dua kali.
Method formatted()
Sejak Java 15, setiap string punya method instance formatted. Mesinnya sama dengan String.format, hanya saja ditulis sebagai pemanggilan method pada template-nya:
Method ini sangat cocok dipasangkan dengan text block (string multi-baris dengan tiga tanda kutip) saat membangun output berformat yang lebih besar.
Kapan Tidak Memakai String.format
Untuk penggabungan sederhana yang hanya sekali, penggabungan biasa dengan + lebih jelas dan lebih cepat:
String greeting = "Hi, " + name + "!"; // simpler than String.format here
Pakai String.format / printf kalau kamu butuh format sungguhan, seperti jumlah angka desimal yang tetap, padding, perataan, atau pengelompokan angka, bukan sekadar menempelkan beberapa nilai.
Berikutnya: Operator
Format mengubah nilai menjadi teks. Untuk menghitung nilai-nilai itu sejak awal, kamu butuh operator Java: aritmatika, perbandingan, dan logika. Itu topik halaman berikutnya.
Pertanyaan yang sering diajukan
Bagaimana cara memformat string di Java?
Pakai String.format(template, values...), yang mengembalikan string baru dengan setiap format specifier diganti oleh sebuah nilai: String.format("%s is %d", name, age). Untuk langsung mencetak tanpa membuat string, pakai System.out.printf(...) dengan template yang sama. Sejak Java 15, kamu juga bisa memanggil template.formatted(values...).
Bagaimana cara memformat angka menjadi dua angka desimal di Java?
Pakai specifier %.2f: String.format("%.2f", 3.14159) menghasilkan "3.14". Angka setelah titik menunjukkan berapa angka desimal yang dipertahankan, dan nilainya dibulatkan. Untuk pemisah ribuan, tambahkan flag koma: %,.2f menghasilkan "1,234.57".
Apa perbedaan String.format dan printf di Java?
Keduanya memakai format specifier yang persis sama. String.format(...) mengembalikan teks yang sudah diformat sebagai String baru yang bisa kamu simpan atau kirim ke tempat lain. System.out.printf(...) menulis teks yang sudah diformat langsung ke output standar dan tidak mengembalikan apa pun yang berguna. Pakai String.format untuk membuat string, printf untuk mencetaknya.