JavaRush /จาวาบล็อก /Random-TH /คลาส MessageFormat
Виталий Рыжаков
ระดับ
Москва

คลาส MessageFormat

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