JavaRush /Java блогу /Random-KY /MessageFormat классы
Виталий Рыжаков
Деңгээл
Москва

MessageFormat классы

Группада жарыяланган
MessageFormatБул макалада мен 2412 (task2412) тапшырмасында колдонулган класс жөнүндө айткым келет . Class MessageFormat - 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тер аргумент катары өткөрүлөт {}. Объекттин позициясы кашаанын ичинде көрсөтүлөт 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Бул code саптардын чыгышы өзгөрө турган маанилердин чегин белгилеген массивди түзөт . Ал эми массив String[] filepartколдонула турган саптардын варианттарын көрсөтөт. filepart[j]Өзгөрмө маанисинен сызык опциясын тандоо шарттары төмөнкүчө аныкталат: параметр, эгерде , тандалат filelimits[j] =< count < filelimits[j+1]. Андан кийин an object түзүлүп, массивдер түзүлөт жана ChoiceFormat fileformанын конструкторуна өткөрүлүп берилет . Метод менен биз an objectке айтабыз , бул ыкма чакырылганда , андан кийин сап үлгүсүндөгү 0 индекси үчүн an objectте көрсөтүлгөн форматтоо колдонулат . Жакшы. Негизи, сиз эч качан Java классын колдонбоо идеясына ээ болушуңуз мүмкүн , бирок бул бардык коңгуроо жана ышкырык эмес экенин бorңиз. Бул code бар: 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. FormatБул массивге массивде аныкталган an objectтерди форматтоого жооптуу an objectтерди (абстрактуу классты ишке ашыруу) кошобуз Object[] testArgs. Эгерде an object форматтоого муктаж болбосо, Format[] testFormatsанда null. Андан кийин, an objectке сап үлгүсүндөгү бардык индекстер массивде аныкталган форматтоону колдонуусу керек деп айтуу үчүн ыкманы pattform.setFormats(testFormats)колдонобуз . Бул мисал үчүн, чыгаруу төмөнкүдөй болот: MessageFormat pattformFormat[] 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