هن آرٽيڪل ۾ آئون ڪلاس بابت ڳالهائڻ چاهيان ٿو
MessageFormat
جيڪو ڪم 2412 (task2412) ۾ استعمال ڪيو ويندو آهي. ڪلاس 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[] filelimits
String[] filepart
form.setFormatByArgumentIndex(0, fileform)
MessageFormat form
format
ChoiceFormat fileform
MessageFormat
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 حل ڪيو وڃي.
GO TO FULL VERSION