Pertanyaan primitif, tetapi bagaimana cara memformat string seperti ini:
"Langkah {1} dari {2}"
dengan mengganti variabel menggunakan Java? Dalam C # itu mudah.
java
string
string-formatting
katit
sumber
sumber
Jawaban:
Selain String.format, lihat juga
java.text.MessageFormat
. Format kurang ringkas dan sedikit lebih dekat dengan contoh C # yang Anda berikan dan Anda dapat menggunakannya untuk parsing juga.Sebagai contoh:
Contoh yang lebih baik mengambil keuntungan dari varargs dan perbaikan autoboxing di Java 1.5 dan mengubah yang di atas menjadi satu-liner:
MessageFormat
sedikit lebih baik untuk melakukan bentuk jamak i18nized dengan pengubah pilihan. Untuk menentukan pesan yang menggunakan bentuk tunggal dengan benar ketika variabel 1 dan jamak sebaliknya, Anda bisa melakukan sesuatu seperti ini:sumber
MessageFormat.format("Number {0}", 1234));
tergantung pada lokal default yang dapat menghasilkanNumber 1,234
bukanNumber 1234
.{0} it ll take firstname
, kapan{1} then lastname
, seperti itu. Apakah mungkin seperti itu{0,choice,0.getFirstName()}
atau sesuatu seperti itu?Lihatlah String.format . Perhatikan, bagaimanapun, bahwa diperlukan penentu format yang mirip dengan keluarga fungsi printf C - misalnya:
Akan kembali "Halo dunia, 42". Anda mungkin menemukan ini membantu ketika mempelajari tentang penentu format. Andy Thomas-Cramer berbaik hati meninggalkan tautan ini dalam komentar di bawah, yang tampaknya mengarah pada spesifikasi resmi. Yang paling umum digunakan adalah:
Ini sangat berbeda dari C #, yang menggunakan referensi posisi dengan penentu format opsional.
Itu berarti Anda tidak dapat melakukan hal-hal seperti:...
tanpa benar-benar mengulangi parameter yang diteruskan ke printf / format.(Lihat komentar The Scrum Meister di bawah ini)Jika Anda hanya ingin mencetak hasilnya secara langsung, Anda mungkin menemukan System.out.printf ( PrintStream.printf ) sesuai dengan keinginan Anda.
sumber
String.format
juga dapat mengambil posisi numerik:String.format("%2$s %1$s", "foo", "bar");
akan menampilkanbar foo
Jika Anda memilih untuk tidak menggunakan String.format, opsi lainnya adalah + operator biner
Ini setara dengan
new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));
Apa pun yang Anda gunakan adalah pilihan Anda. StringBuilder lebih cepat, tetapi perbedaan kecepatannya kecil. Saya lebih suka menggunakan
+
operator (yang melakukanStringBuilder.append(String.valueOf(X)))
dan merasa lebih mudah dibaca.sumber
+
operator. 2) Penjelasan Anda bahkan tidak akurat.+
setara dengan menggunakanStringBuilder
, bukanString.concat
. (Terlalu banyak info tentang ini.)Saya telah menulis metode sederhana saya untuk itu:
jadi kamu bisa menggunakannya sebagai:
sumber
Solusi Java
"-" digunakan untuk meninggalkan indentasi
"15" membuat panjang minimum String menjadi 15
sumber
Solusi ini bekerja untuk saya. Saya perlu membuat url untuk klien REST secara dinamis, jadi saya membuat metode ini, jadi Anda hanya perlu melewati restURL seperti ini
dan tambahkan sebanyak mungkin params yang Anda butuhkan:
Anda hanya perlu memanggil metode ini seperti ini:
Hasil
sumber
Saya menulis fungsi ini, ia melakukan hal yang benar. Interpolasi kata yang dimulai dengan
$
nilai variabel dengan nama yang sama.sumber