JavaRush /Java Blog /Random-ID /Kelas Format Pesan
Виталий Рыжаков
Level 40
Москва

Kelas Format Pesan

Dipublikasikan di grup Random-ID
Pada artikel kali ini saya ingin berbicara tentang kelas MessageFormatyang digunakan dalam tugas 2412 (task2412). Format Pesan Kelas - 1Kelas ini MessageFormatdirancang 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, MessageFormattemplat string diteruskan ke konstruktornya. Selanjutnya, saat memanggil metode formatpada 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, countmengubah keluaran baris sebagai berikut:
  • kalau count = 1kesimpulannya seperti ini

    Я могу подтянуться 1 раз.
  • kalau count = 2kesimpulannya seperti ini

    Я могу подтянуться 2 раза.
  • kalau count = 7kesimpulannya seperti ini

    Я могу подтянуться 7 раз.
Kode ini membuat array double[] filelimitsyang menentukan batas nilai di mana output string akan berubah. Dan array String[] filepartmenunjukkan 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 fileformditeruskan 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[] filelimitsString[] filepartform.setFormatByArgumentIndex(0, fileform)MessageFormat formformatChoiceFormat fileformMessageFormat
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[] testFormatsJika objek tidak perlu diformat, maka null. pattform.setFormats(testFormats)Selanjutnya, kita menggunakan metode ini untuk memberi tahu objek MessageFormat pattformbahwa 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.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION