JavaRush /Blog Java /Random-VI /Lớp MessageFormat
Виталий Рыжаков
Mức độ
Москва

Lớp MessageFormat

Xuất bản trong nhóm
Trong bài viết này tôi muốn nói về lớp MessageFormatđược sử dụng trong nhiệm vụ 2412 (task2412). Định dạng tin nhắn lớp - 1Lớp này MessageFormatđược thiết kế để tạo chuỗi. Lớp Java này nhận một tập hợp các đối tượng, định dạng chúng và sau đó chèn các chuỗi được định dạng vào mẫu tại các vị trí thích hợp. Đây là một loại thay thế (hoặc thậm chí bổ sung) cho phương thức tĩnh String.format. Đầu tiên, một ví dụ đơn giản về việc sử dụng lớp Java này mà không tạo đối tượng mà sử dụng một phương thức tĩnh:
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);
Ở đây, một phương thức tĩnh được gọi MessageFormat.format, trong đó mẫu chuỗi và trên thực tế là các đối tượng sẽ được chèn vào các vị trí được phân cách bằng dấu ngoặc đơn sẽ được truyền dưới dạng đối số {}. Vị trí của đối tượng bắt đầu từ được chỉ định trong dấu ngoặc đơn 0cũng như kiểu định dạng, nếu có. Đầu ra sẽ như thế này:
At 21:25:54 on 28 апр. 2018 г., there was a disturbance in the Force on planet 7.
Ví dụ sau đã tạo một đối tượng của lớp 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));
Khi một đối tượng lớp được tạo, MessageFormatmột mẫu chuỗi sẽ được chuyển tới hàm tạo của nó. Tiếp theo, khi gọi một phương thức formattrên một đối tượng, một mảng đối tượng sẽ được chèn vào mẫu chuỗi sẽ được truyền vào đó dưới dạng đối số. Đầu ra sẽ như thế này:
The disk "MyDisk" contains 1 273 file(s).
Cũng có thể đảm bảo rằng văn bản cần thiết được chọn tùy thuộc vào giá trị của biến. Một loại thực hiện của nhà điều hành if...else, chỉ sử dụng lớp ChoiceFormat. Đây là mã:
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));
Mã này, tùy thuộc vào giá trị của biến, countthay đổi đầu ra của dòng như sau:
  • nếu count = 1kết luận là như thế này

    Я могу подтянуться 1 раз.
  • nếu count = 2kết luận là như thế này

    Я могу подтянуться 2 раза.
  • nếu count = 7kết luận là như thế này

    Я могу подтянуться 7 раз.
Mã này tạo một mảng double[] filelimitschỉ định giới hạn của các giá trị mà tại đó đầu ra của chuỗi sẽ thay đổi. Và mảng String[] filepartchỉ ra các biến thể của chuỗi có thể được sử dụng. Điều kiện để chọn một phương án dòng từ giá trị biến được xác định như sau: phương án sẽ được chọn filepart[j]nếu filelimits[j] =< count < filelimits[j+1]. Tiếp theo, một đối tượng được tạo và tạo các mảng rồi ChoiceFormat fileformtruyền cho hàm tạo của nó . Với phương thức này, chúng ta cho đối tượng biết rằng khi phương thức được gọi thì đối với chỉ mục 0 trong mẫu hàng, hãy sử dụng định dạng đã được chỉ định trong đối tượng . Khỏe. Về nguyên tắc, bạn có thể đã có ý tưởng không bao giờ sử dụng một lớp Java , nhưng hãy biết rằng đây không phải là tất cả những điều thú vị. Có mã này: 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));
Đây là tính năng chính trong mảng Format[] testFormats. Trong mảng này, chúng ta thêm các đối tượng (triển khai lớp trừu tượng Format) chịu trách nhiệm định dạng các đối tượng được xác định trong mảng Object[] testArgs. Format[] testFormatsNếu đối tượng không cần định dạng thì null. pattform.setFormats(testFormats)Tiếp theo, chúng ta sử dụng phương thức này để thông báo cho đối tượng MessageFormat pattformrằng tất cả các chỉ mục trong mẫu hàng phải sử dụng định dạng được xác định trong mảng Format[] testFormats. Đối với ví dụ này, đầu ra sẽ là:
There are no files on ADisk.
28.04.18 22:10
Chỉ vậy thôi và tôi hy vọng các bạn sẽ không gặp khó khăn gì khi giải bài toán 2412.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION