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

MessageFormat сыныбы

Топта жарияланған
MessageFormatБұл мақалада мен 2412 тапсырмада (2412 тапсырма) қолданылатын сынып туралы айтқым келеді . Сынып хабарламасының пішімі - 1Класс MessageFormatжолдарды жасауға арналған. Бұл Java класы нысандар жинағын алады, оларды пішімдейді, содан кейін тиісті орындарда пішімделген жолдарды үлгіге кірістіреді. Бұл статикалық әдіске балама (немесе тіпті қосымша) түрі 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, оған жол үлгісі және, шын мәнінде, жақшамен бөлінген орындарға кірістірілетін нысандар аргумент ретінде беріледі {}. -дан басталатын нысанның орны жақша ішінде көрсетіледі 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));
Класс нысаны жасалғанда MessageFormatжол үлгісі оның конструкторына беріледі. Әрі қарай, нысанда әдісті шақырған кезде formatжол үлгісіне кірістірілетін нысандар жиымы дәлел ретінде сол жерге жіберіледі. Шығару келесідей болады:
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оның конструкторына беріледі . Әдіспен біз нысанға әдіс шақырылғанда , жол үлгісіндегі 0 индексі үшін нысанда көрсетілген пішімдеуді қолдану керектігін айтамыз . Жақсы. Негізінде, сізде Java класын ешқашан пайдаланбау идеясы болуы мүмкін , бірақ бұл барлық қоңыраулар мен ысқырықтар емес екенін біліңіз. Бұл 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ілерді қосамыз (дерексіз классты жүзеге асыру ) Object[] testArgs. Егер нысан пішімдеуді қажет етпесе, Format[] testFormatsонда null. Әрі қарай, нысанға жол үлгісіндегі барлық индекстер массивте анықталған пішімдеуді пайдалану керектігін айту үшін әдісті 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