JavaRush /جاوا بلاگ /Random-SD /MessageFormat ڪلاس
Виталий Рыжаков
سطح
Москва

MessageFormat ڪلاس

گروپ ۾ شايع ٿيل
هن آرٽيڪل ۾ آئون ڪلاس بابت ڳالهائڻ چاهيان ٿو MessageFormatجيڪو ڪم 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