JavaRush /Java Blog /Random-TL /MessageFormat klase

MessageFormat klase

Nai-publish sa grupo
Sa artikulong ito gusto kong pag-usapan ang klase MessageFormatna ginagamit sa gawain 2412 (task2412). Class MessageFormat - 1Ang klase MessageFormatay idinisenyo upang lumikha ng mga string. Ang Java class na ito ay kumukuha ng isang set ng mga bagay, i-format ang mga ito, at pagkatapos ay ilalagay ang mga na-format na string sa template sa mga naaangkop na lokasyon. Ito ay isang uri ng alternatibo (o kahit na karagdagan) sa static na pamamaraan String.format. Una, isang simpleng halimbawa ng paggamit ng Java class na ito nang hindi lumilikha ng isang bagay, ngunit gumagamit ng isang static na pamamaraan:
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);
Narito ang isang static na paraan ay tinatawag na MessageFormat.format, kung saan ang string template at, sa katunayan, ang mga bagay na ipapasok sa mga lugar na nililimitahan ng mga panaklong ay ipinapasa bilang mga argumento {}. Ang posisyon ng bagay na nagsisimula sa ay tinukoy sa panaklong 0, pati na rin ang uri ng pag-format, kung mayroon man. Ang output ay magiging ganito:
At 21:25:54 on 28 апр. 2018 г., there was a disturbance in the Force on planet 7.
Ang sumusunod na halimbawa ay lumilikha na ng object ng klase 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));
Kapag ginawa ang isang object ng klase, MessageFormatisang string na template ang ipinapasa sa constructor nito. Susunod, kapag tumatawag ng isang pamamaraan formatsa isang bagay, isang hanay ng mga bagay na ilalagay sa template ng string ay ipinapasa doon bilang isang argumento. Ang output ay magiging ganito:
The disk "MyDisk" contains 1 273 file(s).
Posible ring tiyakin na ang kinakailangang teksto ay napili depende sa halaga ng variable. Isang uri ng pagpapatupad ng operator if...else, gamit lamang ang klase ChoiceFormat. Narito ang 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));
Ang code na ito, depende sa halaga ng variable, countay nagbabago sa output ng linya tulad ng sumusunod:
  • kung count = 1ganito ang conclusion

    Я могу подтянуться 1 раз.
  • kung count = 2ganito ang conclusion

    Я могу подтянуться 2 раза.
  • kung count = 7ganito ang conclusion

    Я могу подтянуться 7 раз.
Ang code na ito ay lumilikha ng isang array double[] filelimitsna tumutukoy sa mga limitasyon ng mga halaga kung saan ang output ng mga string ay magbabago. At ang array String[] filepartay nagpapahiwatig ng mismong mga variant ng mga string na maaaring gamitin. Ang mga kundisyon para sa pagpili ng opsyon sa linya mula sa variable na halaga ay tinutukoy bilang mga sumusunod: ang opsyon ay pipiliin filepart[j]kung filelimits[j] =< count < filelimits[j+1]. Susunod, ang isang bagay ay nilikha at mga array at ChoiceFormat fileformipinapasa sa constructor nito . Gamit ang pamamaraan, sasabihin namin sa object na kapag tinawag ang pamamaraan , pagkatapos ay para sa index 0 sa template ng row, gamitin ang pag-format na tinukoy sa object . ayos lang. Sa prinsipyo, maaaring mayroon ka nang ideya na hindi kailanman gumamit ng isang klase ng Java , ngunit alamin na hindi ito ang lahat ng mga kampanilya at sipol. Mayroong code na ito: 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));
Narito ang pangunahing tampok sa array Format[] testFormats. Sa array na ito nagdaragdag kami ng mga bagay (nagpapatupad ng abstract na klase Format) na responsable para sa pag-format ng mga bagay na tinukoy sa array Object[] testArgs. Format[] testFormatsKung ang bagay ay hindi nangangailangan ng pag-format, pagkatapos ay null. pattform.setFormats(testFormats)Susunod, ginagamit namin ang paraan upang sabihin sa object MessageFormat pattformna dapat gamitin ng lahat ng mga index sa template ng row ang pag-format na tinukoy sa array Format[] testFormats. Para sa halimbawang ito, ang output ay magiging:
There are no files on ADisk.
28.04.18 22:10
Iyon lang, at umaasa ako na hindi ka mahihirapan sa paglutas ng problema 2412.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION