JavaRush /Blog Java /Random-MS /Kelas MessageFormat

Kelas MessageFormat

Diterbitkan dalam kumpulan
Dalam artikel ini saya ingin bercakap tentang kelas MessageFormatyang digunakan dalam tugasan 2412 (tugas2412). Format Mesej Kelas - 1Kelas MessageFormatdireka untuk mencipta rentetan. Kelas Java ini mengambil satu set objek, memformatkannya, dan kemudian memasukkan rentetan yang diformat ke dalam templat di lokasi yang sesuai. Ini adalah sejenis alternatif (atau tambahan) kepada kaedah statik String.format. Pertama, contoh mudah menggunakan kelas Java ini tanpa membuat objek, tetapi menggunakan kaedah statik:
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 kaedah statik dipanggil MessageFormat.format, yang mana templat rentetan dan, sebenarnya, objek yang akan dimasukkan ke tempat yang dibatasi oleh kurungan dihantar sebagai argumen {}. Kedudukan objek bermula pada dinyatakan dalam kurungan 0, serta jenis pemformatan, 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 mencipta 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));
Apabila objek kelas dicipta, MessageFormattemplat rentetan dihantar kepada pembinanya. Seterusnya, apabila memanggil kaedah formatpada objek, tatasusunan objek yang akan dimasukkan ke dalam templat rentetan dihantar ke sana sebagai hujah. Outputnya akan seperti ini:
The disk "MyDisk" contains 1 273 file(s).
Ia juga mungkin untuk memastikan bahawa teks yang diperlukan dipilih bergantung pada nilai pembolehubah. Sejenis pelaksanaan pengendali if...else, hanya menggunakan kelas ChoiceFormat. Inilah kodnya:
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));
Kod ini, bergantung pada nilai pembolehubah, countmengubah output baris seperti berikut:
  • kalau count = 1kesimpulannya macam ni

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

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

    Я могу подтянуться 7 раз.
Kod ini mencipta tatasusunan double[] filelimitsyang menentukan had nilai di mana output rentetan akan berubah. Dan tatasusunan String[] filepartmenunjukkan varian rentetan yang boleh digunakan. Syarat untuk memilih pilihan baris daripada nilai pembolehubah ditentukan seperti berikut: pilihan akan dipilih filepart[j]jika filelimits[j] =< count < filelimits[j+1]. Seterusnya, objek dicipta dan tatasusunan dan ChoiceFormat fileformdihantar kepada pembinanya . Dengan kaedah, kami memberitahu objek bahawa apabila kaedah dipanggil , maka untuk indeks 0 dalam templat baris, gunakan pemformatan yang ditentukan dalam objek . baiklah. Pada dasarnya, anda mungkin sudah mempunyai idea untuk tidak pernah menggunakan kelas Java , tetapi ketahui bahawa ini bukan semua loceng dan wisel. Terdapat kod 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 ialah ciri utama dalam tatasusunan Format[] testFormats. Dalam tatasusunan ini kami menambah objek (melaksanakan kelas abstrak Format) yang bertanggungjawab untuk memformat objek yang ditakrifkan dalam tatasusunan Object[] testArgs. Format[] testFormatsJika objek tidak memerlukan pemformatan, maka null. pattform.setFormats(testFormats)Seterusnya, kami menggunakan kaedah untuk memberitahu objek MessageFormat pattformbahawa semua indeks dalam corak baris harus menggunakan pemformatan yang ditakrifkan dalam tatasusunan Format[] testFormats. Untuk contoh ini, outputnya ialah:
There are no files on ADisk.
28.04.18 22:10
Itu sahaja, dan saya harap anda tidak akan menghadapi sebarang kesulitan semasa menyelesaikan masalah 2412.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION