JavaRush /وبلاگ جاوا /Random-FA /کلاس MessageFormat
Виталий Рыжаков
مرحله
Москва

کلاس MessageFormat

در گروه منتشر شد
در این مقاله می خواهم در مورد کلاسی MessageFormatکه در task 2412 (task2412) استفاده می شود صحبت کنم. فرمت پیام کلاس - 1کلاس MessageFormatبرای ایجاد رشته طراحی شده است. این کلاس جاوا مجموعه ای از اشیاء را می گیرد، آنها را قالب بندی می کند و سپس رشته های فرمت شده را در مکان های مناسب در قالب قرار می دهد. این یک نوع جایگزین (یا حتی اضافه) برای روش استاتیک است String.format. ابتدا، یک مثال ساده از استفاده از این کلاس جاوا بدون ایجاد یک شی، اما با استفاده از یک متد استاتیک:
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.
مثال زیر قبلاً یک شی از کلاس ایجاد می کند 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. این هم کد:
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));
این کد بسته به مقدار متغیر، countخروجی خط را به صورت زیر تغییر می دهد:
  • اگر count = 1نتیجه گیری اینگونه باشد

    Я могу подтянуться 1 раз.
  • اگر count = 2نتیجه گیری اینگونه باشد

    Я могу подтянуться 2 раза.
  • اگر count = 7نتیجه گیری اینگونه باشد

    Я могу подтянуться 7 раз.
این کد آرایه ای ایجاد می کند double[] filelimitsکه محدوده مقادیری را که خروجی رشته ها تغییر می کند را مشخص می کند. و آرایه String[] filepartانواع رشته هایی را که می توان استفاده کرد را نشان می دهد. شرایط انتخاب یک گزینه خط از مقدار متغیر به شرح زیر تعیین می شود: گزینه filepart[j]در صورتی انتخاب می شود که filelimits[j] =< count < filelimits[j+1]. در مرحله بعد، یک شی ایجاد می شود و آرایه ها و ChoiceFormat fileformبه سازنده آن ارسال می شود . با متد، به شی می گوییم که وقتی متد فراخوانی می شود ، برای شاخص 0 در قالب ردیف، از قالب بندی که در شی مشخص شده است استفاده کنید . خوب. در اصل، ممکن است از قبل این ایده را داشته باشید که هرگز از کلاس جاوا استفاده نکنید ، اما بدانید که این همه زنگ و سوت نیست. این کد وجود دارد: 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) که مسئول قالب بندی اشیاء تعریف شده در آرایه هستند Object[] testArgs. Format[] testFormatsاگر شی نیازی به قالب بندی ندارد ، پس null. در مرحله بعد، از متد استفاده می کنیم تا pattform.setFormats(testFormats)به شیء بگوییم MessageFormat pattformکه همه شاخص های قالب ردیف باید از قالب بندی تعریف شده در آرایه استفاده کنند Format[] 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