JavaRush /مدونة جافا /Random-AR /فئة تنسيق الرسالة
Виталий Рыжаков
مستوى
Москва

فئة تنسيق الرسالة

نشرت في المجموعة
أريد في هذه المقالة أن أتحدث عن الفصل MessageFormatالمستخدم في المهمة 2412 (المهمة 2412). تنسيق رسالة الفصل - 1تم تصميم الفصل MessageFormatلإنشاء سلاسل. تأخذ فئة Java هذه مجموعة من الكائنات، وتقوم بتنسيقها، ثم تقوم بإدراج السلاسل المنسقة في القالب في المواقع المناسبة. يعد هذا نوعًا من البديل (أو حتى الإضافة) للطريقة الثابتة String.format. أولاً، مثال بسيط لاستخدام فئة Java هذه دون إنشاء كائن، ولكن باستخدام طريقة ثابتة:
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 في قالب الصف، استخدم التنسيق المحدد في الكائن . بخير. من حيث المبدأ، ربما تكون لديك بالفعل فكرة عدم استخدام فئة Java مطلقًا ، لكن اعلم أن هذه ليست كل المزايا. يوجد هذا الكود : 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