MessageFormat
Bu yazıda 2412 (task2412) tapşırığında istifadə olunan sinif haqqında danışmaq istəyirəm . Sinif MessageFormat
sətirlər yaratmaq üçün nəzərdə tutulmuşdur. Bu Java sinfi bir sıra obyektləri götürür, onları formatlayır və sonra formatlanmış sətirləri müvafiq yerlərdə şablona daxil edir. Bu, statik metoda bir növ alternativdir (və ya hətta əlavədir) String.format
. Birincisi, obyekt yaratmadan, lakin statik metoddan istifadə etməklə bu Java sinifindən istifadənin sadə nümunəsi:
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);
Burada statik metod çağırılır MessageFormat.format
, ona sətir şablonu və əslində mötərizə ilə ayrılmış yerlərə daxil ediləcək obyektlər arqumentlər kimi ötürülür {}
. -dan başlayan obyektin mövqeyi mötərizədə göstərilir 0
, həmçinin formatlaşdırma növü, əgər varsa. Çıxış belə olacaq:
At 21:25:54 on 28 апр. 2018 г., there was a disturbance in the Force on planet 7.
Aşağıdakı nümunə artıq sinif obyektini yaradı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));
Sinif obyekti yaradıldıqda, MessageFormat
sətir şablonu onun konstruktoruna ötürülür. Sonra, bir obyektdə metodu çağırarkən format
, sətir şablonuna daxil ediləcək obyektlər massivi arqument kimi oraya ötürülür. Çıxış belə olacaq:
The disk "MyDisk" contains 1 273 file(s).
Həm də dəyişənin qiymətindən asılı olaraq tələb olunan mətnin seçildiyinə əmin olmaq mümkündür. if...else
Yalnız sinifdən istifadə edən operatorun bir növ tətbiqi ChoiceFormat
. Budur 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, dəyişənin dəyərindən asılı olaraq, count
xəttin çıxışını aşağıdakı kimi dəyişir:
-
əgər
count = 1
nəticə belədirsəЯ могу подтянуться 1 раз.
-
əgər
count = 2
nəticə belədirsəЯ могу подтянуться 2 раза.
-
əgər
count = 7
nəticə belədirsəЯ могу подтянуться 7 раз.
double[] filelimits
Bu kod sətirlərin çıxışının dəyişəcəyi dəyərlərin sərhədlərini təyin edən massiv yaradır . Və massiv String[] filepart
istifadə edilə bilən sətirlərin çox variantlarını göstərir. filepart[j]
Dəyişən dəyərindən xətt variantının seçilməsi şərtləri aşağıdakı kimi müəyyən edilir: əgər opsiya seçiləcək filelimits[j] =< count < filelimits[j+1]
. Sonra obyekt yaradılır və massivlər yaradılır və ChoiceFormat fileform
onun konstruktoruna ötürülür . Metodla biz obyektə deyirik ki, metod çağırıldıqda , sonra sıra şablonunda 0 indeksi üçün obyektdə göstərilən formatdan istifadə edin . Yaxşı. Prinsipcə, heç vaxt Java sinifindən istifadə etməmək fikrinə sahib ola bilərsiniz , amma bilin ki, bu, bütün zənglər və fitlər deyil. Bu kod var: 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));
Budur massivin əsas xüsusiyyəti Format[] testFormats
. Bu massivdə Format
massivdə müəyyən edilmiş obyektlərin formatlaşdırılmasına cavabdeh olan obyektləri (mücərrəd sinfi həyata keçirən) əlavə edirik Object[] testArgs
. Format[] testFormats
Əgər obyektin formatlaşdırılmasına ehtiyac yoxdursa , o zaman null
. Sonra, obyektə sətir nümunəsindəki bütün indekslərin massivdə müəyyən edilmiş formatlaşdırmadan istifadə etməli olduğunu söyləmək üçün metoddan istifadə pattform.setFormats(testFormats)
edirik . Bu nümunə üçün çıxış belə olacaq: MessageFormat pattform
Format[] testFormats
There are no files on ADisk.
28.04.18 22:10
Hamısı budur və ümid edirəm ki, 2412 problemini həll edərkən heç bir çətinlik çəkməyəcəksiniz.
GO TO FULL VERSION