MessageFormat
Бұл мақалада мен 2412 тапсырмада (2412 тапсырма) қолданылатын сынып туралы айтқым келеді . Класс 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[] filelimits
String[] filepart
form.setFormatByArgumentIndex(0, fileform)
MessageFormat form
format
ChoiceFormat fileform
MessageFormat
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 pattform
Format[] testFormats
There are no files on ADisk.
28.04.18 22:10
Бар болғаны, 2412 есебін шешуде қиындықтар болмайды деп сенемін.
GO TO FULL VERSION