JavaRush /בלוג Java /Random-HE /כיתה MessageFormat
Виталий Рыжаков
רָמָה
Москва

כיתה MessageFormat

פורסם בקבוצה
במאמר זה אני רוצה לדבר על המחלקה MessageFormatהמשמשת במשימה 2412 (משימה 2412). פורמט הודעה בכיתה - 1הכיתה MessageFormatנועדה ליצור מחרוזות. מחלקה זו של Java לוקחת קבוצה של אובייקטים, מעצבת אותם, ואז מכניסה את המחרוזות המעוצבות לתבנית במקומות המתאימים. זהו סוג של חלופה (או אפילו תוספת) לשיטה הסטטית 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