JavaRush /Java blogi /Random-UZ /MessageFormat sinfi
Виталий Рыжаков
Daraja
Москва

MessageFormat sinfi

Guruhda nashr etilgan
MessageFormatUshbu maqolada men 2412-topshiriqda (task2412) ishlatiladigan sinf haqida gapirmoqchiman . Sinf xabari formati - 1Sinf MessageFormatsatrlarni yaratish uchun mo'ljallangan. Ushbu Java klassi ob'ektlar to'plamini oladi, ularni formatlaydi va keyin tegishli joylarda shablonga formatlangan satrlarni kiritadi. Bu statik usulga bir xil muqobil (yoki hatto qo'shimcha) String.format. Birinchidan, ushbu Java sinfidan ob'ekt yaratmasdan, lekin statik usuldan foydalanishning oddiy misoli:
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);
Bu erda statik usul chaqiriladi MessageFormat.format, unga satr shablonlari va aslida qavslar bilan chegaralangan joylarga kiritiladigan ob'ektlar argumentlar sifatida uzatiladi {}. da boshlanadigan ob'ektning pozitsiyasi qavslar ichida ko'rsatilgan 0, shuningdek, agar mavjud bo'lsa, formatlash turi. Chiqish quyidagicha bo'ladi:
At 21:25:54 on 28 апр. 2018 г., there was a disturbance in the Force on planet 7.
Quyidagi misol allaqachon sinf ob'ektini yaratadi 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));
Sinf obyekti yaratilganda MessageFormatuning konstruktoriga string shablon uzatiladi. Keyinchalik, ob'ektga usulni chaqirganda format, argument sifatida satr shabloniga kiritiladigan ob'ektlar massivi uzatiladi. Chiqish quyidagicha bo'ladi:
The disk "MyDisk" contains 1 273 file(s).
Shuningdek, o'zgaruvchining qiymatiga qarab kerakli matn tanlanganligiga ishonch hosil qilish mumkin. Operatorni amalga oshirishning bir turi if...else, faqat sinf yordamida ChoiceFormat. Mana kod:
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));
Ushbu kod, o'zgaruvchining qiymatiga qarab, countqatorning chiqishini quyidagicha o'zgartiradi:
  • agar count = 1xulosa shunday bo'lsa

    Я могу подтянуться 1 раз.
  • agar count = 2xulosa shunday bo'lsa

    Я могу подтянуться 2 раза.
  • agar count = 7xulosa shunday bo'lsa

    Я могу подтянуться 7 раз.
double[] filelimitsUshbu kod satrlar chiqishi o'zgarishi mumkin bo'lgan qiymatlar chegaralarini belgilaydigan massivni yaratadi . Va massiv String[] filepartishlatilishi mumkin bo'lgan satrlarning juda ko'p variantlarini ko'rsatadi. filepart[j]O'zgaruvchi qiymatidan chiziqli variantni tanlash shartlari quyidagicha aniqlanadi: variant, agar bo'lsa tanlanadi filelimits[j] =< count < filelimits[j+1]. Keyinchalik, ob'ekt yaratiladi va massivlar tuziladi va ChoiceFormat fileformuning konstruktoriga uzatiladi . Usul yordamida biz ob'ektga aytamizki , usul chaqirilganda , keyin qator shablonidagi indeks 0 uchun ob'ektda ko'rsatilgan formatlashdan foydalaning . Yaxshi. Printsipial jihatdan, sizda Java sinfidan hech qachon foydalanmaslik fikriga ega bo'lishingiz mumkin , lekin bilingki, bu hamma narsa emas. Bu kod mavjud: 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));
Bu qatordagi asosiy xususiyat Format[] testFormats. FormatUshbu massivga biz massivda aniqlangan ob'ektlarni formatlash uchun mas'ul bo'lgan ob'ektlarni (mavhum sinfni amalga oshirish) qo'shamiz Object[] testArgs. Agar ob'ekt formatlashni talab qilmasa, u Format[] testFormatsholda null. Keyinchalik, ob'ektga satr shablonidagi barcha indekslar massivda belgilangan formatlashdan foydalanishi kerakligini aytish uchun usuldan pattform.setFormats(testFormats)foydalanamiz . Ushbu misol uchun chiqish quyidagicha bo'ladi: MessageFormat pattformFormat[] testFormats
There are no files on ADisk.
28.04.18 22:10
Hammasi shu va umid qilamanki, siz 2412-sonli muammoni hal qilishda hech qanday qiyinchiliklarga duch kelmaysiz.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION