JavaRush /Java Blogu /Random-AZ /MessageFormat sinfi
Виталий Рыжаков
Səviyyə
Москва

MessageFormat sinfi

Qrupda dərc edilmişdir
MessageFormatBu yazıda 2412 (task2412) tapşırığında istifadə olunan sinif haqqında danışmaq istəyirəm . Class MessageFormat - 1Sinif MessageFormatsə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, MessageFormatsə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...elseYalnı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, countxəttin çıxışını aşağıdakı kimi dəyişir:
  • əgər count = 1nəticə belədirsə

    Я могу подтянуться 1 раз.
  • əgər count = 2nəticə belədirsə

    Я могу подтянуться 2 раза.
  • əgər count = 7nəticə belədirsə

    Я могу подтянуться 7 раз.
double[] filelimitsBu 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[] filepartistifadə 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 fileformonun 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[] 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));
Budur massivin əsas xüsusiyyəti Format[] testFormats. Bu massivdə Formatmassivdə 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 pattformFormat[] 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.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION