JavaRush /Java Blog /Random-TK /MessageFormat synpy
Виталий Рыжаков
Dereje
Москва

MessageFormat synpy

Toparda çap edildi
MessageFormatBu makalada 2412-nji ýumuşda (synp2412) ulanylýan synp hakda gürleşmek isleýärin . Synp habaryFormat - 1Synp MessageFormatsetirleri döretmek üçin döredildi. Bu Java synpy obýektleriň toplumyny alýar, formatlaýar we formatlanan setirleri degişli ýerlerde şablona salýar. Bu statiki usulyň bir görnüşi (ýa-da goşmaça) String.format. Ilki bilen, bu Java synpyny obýekt döretmän, statiki usul ulanmagyň ýönekeý mysaly:
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 ýerde statiki usul diýilýär MessageFormat.format, oňa setir şablony we aslynda gabygyň üsti bilen bölünen ýerlere salynjak zatlar argument hökmünde geçirilýär {}. Başlaýan obýektiň ýagdaýy, gabygyň içinde 0, şeýle hem formatirlemegiň görnüşinde görkezilýär. Çykyş şeýle bolar:
At 21:25:54 on 28 апр. 2018 г., there was a disturbance in the Force on planet 7.
Aşakdaky mysal eýýäm synpyň obýektini döredýär 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));
Synp obýekti döredilende, MessageFormatkonstruktoryna setir şablony geçirilýär. Ondan soň, bir obýektde usul çagyrylanda format, setir şablonyna salynjak obýektleriň bir topary argument hökmünde geçýär. Çykyş şeýle bolar:
The disk "MyDisk" contains 1 273 file(s).
Şeýle hem üýtgeýäniň bahasyna baglylykda zerur tekstiň saýlanandygyna göz ýetirmek bolýar. if...elseDiňe synpy ulanyp, operatory durmuşa geçirmegiň bir görnüşi ChoiceFormat. Ine 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));
Bu kod, üýtgeýjiniň bahasyna baglylykda countsetiriň çykyşyny aşakdaky ýaly üýtgedýär:
  • count = 1netije şeýle bolsa

    Я могу подтянуться 1 раз.
  • count = 2netije şeýle bolsa

    Я могу подтянуться 2 раза.
  • count = 7netije şeýle bolsa

    Я могу подтянуться 7 раз.
Bu kody double[] filelimitssetirleriň çykyşynyň üýtgejek bahalarynyň çäklerini kesgitleýän bir massiw döredýär. Bu massiwde String[] filepartulanyp boljak setirleriň dürli görnüşlerini görkezýär. filepart[j]Üýtgeýän bahadan setir opsiýasyny saýlamagyň şertleri aşakdaky ýaly kesgitlenýär: eger opsiýa saýlanar filelimits[j] =< count < filelimits[j+1]. Ondan soň bir obýekt döredilýär we massiw edilýär we ChoiceFormat fileformkonstruktoryna geçirilýär . Usul bilen, usul diýlende , soňra hatar şablonyndaky 0 indeks üçin obýektde görkezilen formatlamany ulanyň diýýäris . Gowy. Aslynda, Java synpyny hiç haçan ulanmazlyk pikiriňiz bolup biler , ýöne munuň hemmesiniň jaň we jyňňyrdadygyny biliň. Bu kod bar: 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));
Ine, massiwdäki esasy aýratynlyk Format[] testFormats. FormatBu massiwde , massiwde kesgitlenen obýektleri formatlamak üçin jogapkär obýektleri (abstrakt synpy durmuşa geçirýäris) goşýarys Object[] testArgs. Format[] testFormatsObýektiň formatirlemegi zerur däl bolsa , onda null. Ondan soň, hatara nagyşdaky ähli indeksleriň massiwde kesgitlenen formatlamany ulanmalydygyny obýekte aýtmak üçin usuly pattform.setFormats(testFormats)ulanýarys . Bu mysal üçin çykyş: MessageFormat pattformFormat[] testFormats
There are no files on ADisk.
28.04.18 22:10
Bularyň hemmesi we 2412-nji meseläni çözmekde kynçylyk çekmersiňiz diýip umyt edýärin.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION