MessageFormat
Ushbu maqolada men 2412-topshiriqda (task2412) ishlatiladigan sinf haqida gapirmoqchiman . Sinf MessageFormat
satrlarni 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 MessageFormat
uning 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, count
qatorning chiqishini quyidagicha o'zgartiradi:
-
agar
count = 1
xulosa shunday bo'lsaЯ могу подтянуться 1 раз.
-
agar
count = 2
xulosa shunday bo'lsaЯ могу подтянуться 2 раза.
-
agar
count = 7
xulosa shunday bo'lsaЯ могу подтянуться 7 раз.
double[] filelimits
Ushbu kod satrlar chiqishi o'zgarishi mumkin bo'lgan qiymatlar chegaralarini belgilaydigan massivni yaratadi . Va massiv String[] filepart
ishlatilishi 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 fileform
uning 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[] 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));
Bu qatordagi asosiy xususiyat Format[] testFormats
. Format
Ushbu 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[] testFormats
holda 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 pattform
Format[] 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.
GO TO FULL VERSION