Gunakan kembali parameter dalam String.format?


140
String hello = "Hello";

String.format("%s %s %s %s %s %s", hello, hello, hello, hello, hello, hello);

hello hello hello hello hello hello 

Apakah variabel hello perlu diulang beberapa kali dalam panggilan ke metode format atau ada versi singkatan yang memungkinkan Anda menentukan argumen satu kali untuk diterapkan ke semua %stoken?

Jawaban:


268

Dari dokumen :

  • Penentu format untuk tipe umum, karakter, dan numerik memiliki sintaks berikut:

        %[argument_index$][flags][width][.precision]conversion
    

    Opsional argument_index adalah desimal integer yang menunjukkan posisi argumen dalam daftar argumen. Argumen pertama direferensikan oleh "1$", yang kedua oleh "2$", dll.

String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello);


15

Anda perlu argumen indeks pengguna %[argument_index$]sebagai berikut:

String hello = "Hello";
String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello);

Hasil: hello hello hello hello hello hello


4

Satu kasus umum untuk menggunakan kembali argumen di String.formatadalah dengan pemisah (misalnya ";"untuk CSV atau tab untuk konsol).

System.out.println(String.format("%s %2$s %s %2$s %s %n", "a", ";", "b", "c"));
// "a ; ; ; b"

Ini bukan hasil yang diinginkan. "c"tidak muncul di mana pun.

Anda perlu menggunakan pemisah terlebih dahulu (dengan %s) dan hanya menggunakan indeks argumen ( %2$s) untuk kejadian berikut ini:

System.out.println(String.format("%s %s %s %2$s %s %n", "a", ";", "b", "c"));
//  "a ; b ; c"

Spasi ditambahkan agar terbaca dan debugging. Setelah formatnya benar, spasi dapat dihapus di editor teks:

System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c"));
// "a;b;c"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.