JavaRush /Блоги Java /Random-TG /Синфи MessageFormat
Виталий Рыжаков
Сатҳи
Москва

Синфи MessageFormat

Дар гурӯҳ нашр шудааст
Дар ин мақола ман мехоҳам дар бораи синфе MessageFormat, ки дар вазифаи 2412 (task2412) истифода мешавад, сӯҳбат кунам. Формати паёми синф - 1Синф 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 раз.
Ин code массиверо эҷод мекунад double[] filelimits, ки ҳудуди арзишҳоро, ки дар он баромади сатрҳо тағир меёбад, муайян мекунад. Ва массив String[] filepartхеле вариантҳои сатрҳоро нишон медиҳад, ки онҳоро истифода бурдан мумкин аст. Шартҳои интихоби варианти сатр аз арзиши тағирёбанда ба таври зерин муайян карда мешаванд: опсия filepart[j]агар filelimits[j] =< count < filelimits[j+1]. Баъдан, an object сохта мешавад ва массивҳо ва ChoiceFormat fileformба созандаи он интиқол дода мешаванд . Бо усул, мо ба an object мегӯем , ки вақте ки усул даъват карда мешавад , пас барои индекси 0 дар қолаби сатр форматкунии дар an object нишондодашударо истифода баред . Хуб. Аслан, шумо шояд аллакай ғояи истифодаи синфи Java-ро дошта бошед , аммо бидонед, ки ин ҳама зангҳо ва ҳуштакҳо нестанд. Ин рамз вуҷуд дорад: 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));
Дар ин ҷо хусусияти асосии массив аст 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 ҳеҷ мушкиле нахоҳед дошт.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION