Дар ин мақола ман мехоҳам дар бораи синфе
MessageFormat
, ки дар вазифаи 2412 (task2412) истифода мешавад, сӯҳбат кунам. Синф MessageFormat
барои сохтани сатрҳо пешбинӣ шудааст. Ин синфи Java маҷмӯи an objectҳоро мегирад, онҳоро формат мекунад ва сипас сатрҳои форматшударо ба қолаб дар ҷойҳои мувофиқ дохил мекунад. Ин як навъ алтернатива (ё ҳатто илова) ба усули статикӣ мебошад String.format
. Аввалан, як мисоли оддии истифодаи ин синфи Java бидуни эҷоди an object, аммо бо истифода аз усули статикӣ:
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);
Дар ин ҷо усули статикӣ номида мешавад MessageFormat.format
, ки ба он қолаби сатр ва воқеан an objectҳое, ки ба ҷойҳои бо қавс ҷудошуда ворид карда мешаванд, ҳамчун аргумент интиқол дода мешаванд {}
. Мавқеи an object, ки аз он сар мешавад, дар қавс 0
, инчунин навъи форматкунӣ, агар мавҷуд бошад, нишон дода мешавад. Натиҷа чунин хоҳад буд:
At 21:25:54 on 28 апр. 2018 г., there was a disturbance in the Force on planet 7.
Мисоли зерин аллакай an objectи синфро эҷод мекунад 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));
Вақте ки an objectи синф сохта мешавад, MessageFormat
қолаби сатр ба созандаи он интиқол дода мешавад. Минбаъд, ҳангоми даъват кардани метод format
ба an object, массиви an objectҳое, ки ба қолаби сатр ворид карда мешаванд, ҳамчун аргумент ба он ҷо интиқол дода мешаванд. Натиҷа чунин хоҳад буд:
The disk "MyDisk" contains 1 273 file(s).
Инчунин боварӣ ҳосил кардан мумкин аст, ки матни зарурӣ вобаста ба арзиши тағирёбанда интихоб карда мешавад. Як навъ амалисозии оператор if...else
, танҳо бо истифода аз синф ChoiceFormat
. Ин аст code:
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));
Ин code, вобаста ба арзиши тағирёбанда, count
баромади сатрро ба таври зерин тағир медиҳад:
-
агар
count = 1
хулоса хамин тавр бошадЯ могу подтянуться 1 раз.
-
агар
count = 2
хулоса хамин тавр бошадЯ могу подтянуться 2 раза.
-
агар
count = 7
хулоса хамин тавр бошадЯ могу подтянуться 7 раз.
double[] filelimits
, ки ҳудуди арзишҳоро, ки дар он баромади сатрҳо тағир меёбад, муайян мекунад. Ва массив String[] filepart
хеле вариантҳои сатрҳоро нишон медиҳад, ки онҳоро истифода бурдан мумкин аст. Шартҳои интихоби варианти сатр аз арзиши тағирёбанда ба таври зерин муайян карда мешаванд: опсия filepart[j]
агар filelimits[j] =< count < filelimits[j+1]
. Баъдан, an object сохта мешавад ва массивҳо ва ChoiceFormat fileform
ба созандаи он интиқол дода мешаванд . Бо усул, мо ба an object мегӯем , ки вақте ки усул даъват карда мешавад , пас барои индекси 0 дар қолаби сатр форматкунии дар an object нишондодашударо истифода баред . Хуб. Аслан, шумо шояд аллакай ғояи истифодаи синфи Java-ро дошта бошед , аммо бидонед, ки ин ҳама зангҳо ва ҳуштакҳо нестанд. Ин рамз вуҷуд дорад: 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));
Дар ин ҷо хусусияти асосии массив аст Format[] testFormats
. Дар ин массив мо an objectҳоро илова мекунем (амали синфи абстрактӣ Format
), ки барои формат кардани an objectҳои дар массив муайяншуда масъуланд Object[] testArgs
. Format[] testFormats
Агар an object ба форматкунӣ ниёз надошта бошад , пас null
. pattform.setFormats(testFormats)
Баъдан, мо усулро истифода мебарем, то ба an object бигӯем MessageFormat pattform
, ки ҳамаи индексҳо дар қолаби сатр бояд форматкунии дар массив муайяншударо истифода баранд Format[] testFormats
. Барои ин мисол, натиҷа чунин хоҳад буд:
There are no files on ADisk.
28.04.18 22:10
Ин ҳама аст ва ман умедворам, ки шумо ҳангоми ҳалли масъалаи 2412 ҳеҷ мушкиле нахоҳед дошт.
GO TO FULL VERSION