Pada artikel kali ini saya ingin berbicara tentang kelas
MessageFormat
yang digunakan dalam tugas 2412 (task2412). Kelas ini MessageFormat
dirancang untuk membuat string. Kelas Java ini mengambil sekumpulan objek, memformatnya, dan kemudian memasukkan string yang telah diformat ke dalam templat di lokasi yang sesuai. Ini adalah semacam alternatif (atau bahkan tambahan) untuk metode statis String.format
. Pertama, contoh sederhana penggunaan kelas Java ini tanpa membuat objek, tetapi menggunakan metode statis:
int planet = 7;
String event = "a disturbance in the Force";
String result = MessageFormat.format(
"At {0, time, medium} on {0, date}, there was {1} on planet {2, number, integer}.",
new Date(), event, planet);
System.out.println(result);
Di sini metode statis disebut MessageFormat.format
, yang mana templat string dan, pada kenyataannya, objek yang akan disisipkan ke tempat yang dibatasi oleh tanda kurung diteruskan sebagai argumen {}
. Posisi awal objek ditentukan dalam tanda kurung 0
, serta jenis pemformatannya, jika ada. Outputnya akan seperti ini:
At 21:25:54 on 28 апр. 2018 г., there was a disturbance in the Force on planet 7.
Contoh berikut sudah membuat objek kelas MessageFormat
:
int fileCount = 1273;
String diskName = "MyDisk";
Object[] testArgs = {fileCount, diskName};
MessageFormat form = new MessageFormat(
"The disk \"{1}\" contains {0} file(s).");
System.out.println(form.format(testArgs));
Ketika objek kelas dibuat, MessageFormat
templat string diteruskan ke konstruktornya. Selanjutnya, saat memanggil metode format
pada suatu objek, array objek yang akan dimasukkan ke dalam template string diteruskan ke sana sebagai argumen. Outputnya akan seperti ini:
The disk "MyDisk" contains 1 273 file(s).
Dimungkinkan juga untuk memastikan bahwa teks yang diperlukan dipilih tergantung pada nilai variabel. Semacam implementasi operator if...else
, hanya menggunakan kelas ChoiceFormat
. Berikut kodenya:
MessageFormat form = new MessageFormat("Я могу {1} {0}.");
int count = 2;
String exercise = "подтянуться";
Object[] testArgs = {count, exercise};
double[] filelimits = {0,2,5};
String[] filepart = {"{0} раз","{0} раза","{0} раз"};
ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);
form.setFormatByArgumentIndex(0, fileform);
System.out.println(form.format(testArgs));
Kode ini, bergantung pada nilai variabel, count
mengubah keluaran baris sebagai berikut:
-
kalau
count = 1
kesimpulannya seperti iniЯ могу подтянуться 1 раз.
-
kalau
count = 2
kesimpulannya seperti iniЯ могу подтянуться 2 раза.
-
kalau
count = 7
kesimpulannya seperti iniЯ могу подтянуться 7 раз.
double[] filelimits
yang menentukan batas nilai di mana output string akan berubah. Dan array String[] filepart
menunjukkan varian string yang dapat digunakan. Ketentuan pemilihan opsi garis dari nilai variabel ditentukan sebagai berikut: opsi akan dipilih filepart[j]
jika filelimits[j] =< count < filelimits[j+1]
. Selanjutnya, sebuah objek dibuat dan array dan ChoiceFormat fileform
diteruskan ke konstruktornya . Dengan metode, kita memberi tahu objek bahwa ketika metode dipanggil , maka untuk indeks 0 di templat baris, gunakan format yang ditentukan dalam objek . Bagus. Pada prinsipnya, Anda mungkin sudah memiliki gagasan untuk tidak pernah menggunakan kelas Java , tetapi ketahuilah bahwa ini bukanlah hal yang menarik. Ada kode ini: double[] filelimits
String[] filepart
form.setFormatByArgumentIndex(0, fileform)
MessageFormat form
format
ChoiceFormat fileform
MessageFormat
MessageFormat pattform = new MessageFormat("There {0} on {1}.\n{2} {2}");
int count = 0;
Date date = new Date();
Object[] testArgs = {count, "ADisk", date, date};
double[] filelimits = {0,1,2};
String[] filepart = {"are no files","is one file","are {0} files"};
ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);
Format[] testFormats
= {fileform, null, DateFormat.getDateInstance(DateFormat.SHORT), DateFormat.getTimeInstance(DateFormat.SHORT)};
pattform.setFormats(testFormats);
System.out.println(pattform.format(testArgs));
Berikut adalah fitur utama dalam array Format[] testFormats
. Dalam array ini kita menambahkan objek (mengimplementasikan kelas abstrak Format
) yang bertanggung jawab untuk memformat objek yang ditentukan dalam array Object[] testArgs
. Format[] testFormats
Jika objek tidak perlu diformat, maka null
. pattform.setFormats(testFormats)
Selanjutnya, kita menggunakan metode ini untuk memberi tahu objek MessageFormat pattform
bahwa semua indeks di templat baris harus menggunakan format yang ditentukan dalam array Format[] testFormats
. Untuk contoh ini, outputnya adalah:
There are no files on ADisk.
28.04.18 22:10
Itu saja, dan saya harap Anda tidak mengalami kesulitan saat menyelesaikan soal 2412.
GO TO FULL VERSION