ในบทความนี้ ผมอยากพูดถึงคลาส
คลาส
MessageFormat
ที่ใช้ใน Task 2412 (task2412) MessageFormat
ถูกออกแบบมาเพื่อสร้างสตริง คลาส Java นี้รับชุดของอ็อบเจ็กต์ จัดรูปแบบ จากนั้นแทรกสตริงที่จัดรูปแบบลงในเทมเพลตในตำแหน่งที่เหมาะสม นี่เป็นทางเลือก (หรือเพิ่มเติม) ให้กับวิธีString.format
static ขั้นแรก ตัวอย่างง่ายๆ ของการใช้คลาส 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[] 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