MessageFormat
Bu makalada 2412-nji ýumuşda (synp2412) ulanylýan synp hakda gürleşmek isleýärin .
Synp
MessageFormat
setirleri 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,
MessageFormat
konstruktoryna 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...else
Diň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
count
setiriň çykyşyny aşakdaky ýaly üýtgedýär:
-
count = 1
netije şeýle bolsa
Я могу подтянуться 1 раз.
-
count = 2
netije şeýle bolsa
Я могу подтянуться 2 раза.
-
count = 7
netije şeýle bolsa
Я могу подтянуться 7 раз.
Bu kody
double[] filelimits
setirleriň çykyşynyň üýtgejek bahalarynyň çäklerini kesgitleýän bir massiw döredýär. Bu massiwde
String[] filepart
ulanyp 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 fileform
konstruktoryna 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[] 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));
Ine, massiwdäki esasy aýratynlyk
Format[] testFormats
.
Format
Bu massiwde , massiwde kesgitlenen obýektleri formatlamak üçin jogapkär obýektleri (abstrakt synpy durmuşa geçirýäris) goşýarys
Object[] testArgs
.
Format[] testFormats
Obý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 pattform
Format[] 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.
GO TO FULL VERSION