Pertanyaan sederhana, tetapi saya berani bertaruh bahwa menanyakan di sini mungkin akan lebih mudah daripada mencoba memahami dokumentasi untuk MessageFormat
:
long foo = 12345;
String s = MessageFormat.format("{0}", foo);
Nilai yang diamati adalah "12,345".
Nilai yang diinginkan adalah "12345".
java
messageformat
Daniel Fortunov
sumber
sumber
String.valueOf(long)
sumber
MessageFormat.format("{0,choice,0#no foos|1#one foo|1<'{0,number,#}' foos}"
Saya sedikit kesulitan dengan ini ketika mencoba melakukan pola "dunia nyata" dengan internasionalisasi, dll. Secara khusus, kita memiliki kebutuhan untuk menggunakan format "pilihan" di mana keluarannya tergantung pada nilai yang ditampilkan, dan untuk itulah
java.text.ChoiceFormat
.Berikut adalah contoh cara menyelesaikannya:
Ini menghasilkan keluaran berikut; Saya harap ini membantu orang lain yang mencoba mencapai jenis hal yang sama:
Seperti yang Anda lihat, format "pilihan" memungkinkan kita untuk memilih jenis format yang akan digunakan bergantung pada nilai yang diteruskan untuk diformat. Angka kecil dapat diganti dengan teks (tidak ada tampilan dari nilai aslinya). Nomor berukuran sedang ditampilkan tanpa pemisah pengelompokan (tanpa koma). Angka terbesar memang menyertakan koma, sekali lagi. Jelas, ini adalah contoh yang dibuat-buat untuk menunjukkan fleksibilitas
java.text.MessageFormat
.Catatan tentang kutipan
#
dalam format teks: karena keduanyaChoiceFormat
danMessageFormat
sedang digunakan, ada benturan antara karakter meta di antara keduanya.ChoiceFormat
menggunakan#
sebagai karakter meta yang pada dasarnya berarti "sama dengan" sehingga mesin pemformatan tahu bahwa misalnya dalam kasus1#one!
kita membandingkan{0}
dengan1
, dan jika sama, mesin menggunakan "pilihan" tersebut.Tetapi
#
memiliki arti lain untukMessageFormat
, yaitu sebagai metakarakter yang memiliki arti untukDecimalFormat
: itu adalah metakarakter yang berarti "taruh nomor di sini".Karena dibungkus dalam
ChoiceFormat
string,#
perlu dikutip. KetikaChoiceFormat
selesai mem-parsing string, tanda kutip tersebut dihapus ketika meneruskan subformat keMessageFormat
(dan kemudian keDecimalFormat
).Jadi saat Anda menggunakan
{0,choice,...}
, Anda harus mengutip#
karakter tersebut, dan mungkin yang lainnya.sumber
Cara terpendek adalah
sumber
new StringBuilder("").append(foo).toString()
tidak terlalu optimal.""+
Long.toString()
karena itulah yang digunakan solusi ini di latar belakang :)Sebagai alternatif
String.format
danjava.util.Formatter
mungkin berhasil untuk Anda juga ...sumber
Kamu bisa mencoba:
sumber