JavaRush /Java-Blog /Random-DE /MessageFormat-Klasse
Виталий Рыжаков
Level 40
Москва

MessageFormat-Klasse

Veröffentlicht in der Gruppe Random-DE
In diesem Artikel möchte ich über die Klasse sprechen MessageFormat, die in Aufgabe 2412 (task2412) verwendet wird. Klasse MessageFormat – 1Die Klasse MessageFormatdient zum Erstellen von Zeichenfolgen. Diese Java-Klasse nimmt eine Reihe von Objekten, formatiert sie und fügt dann die formatierten Zeichenfolgen an den entsprechenden Stellen in die Vorlage ein. Dies ist eine Art Alternative (oder sogar Ergänzung) zur statischen Methode String.format. Zunächst ein einfaches Beispiel für die Verwendung dieser Java-Klasse, ohne ein Objekt zu erstellen, sondern eine statische Methode zu verwenden:
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);
Hier wird eine statische Methode aufgerufen MessageFormat.format, an die als Argumente die String-Vorlage und tatsächlich Objekte übergeben werden, die an durch Klammern getrennten Stellen eingefügt werden {}. In Klammern wird die Position des Objekts angegeben, bei der es beginnt 0, sowie ggf. die Art der Formatierung. Die Ausgabe sieht folgendermaßen aus:
At 21:25:54 on 28 апр. 2018 г., there was a disturbance in the Force on planet 7.
Das folgende Beispiel erstellt bereits ein Objekt der Klasse 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));
Wenn ein Klassenobjekt erstellt wird, MessageFormatwird eine Zeichenfolgenvorlage an seinen Konstruktor übergeben. Als nächstes wird beim Aufruf einer Methode formatfür ein Objekt ein Array von Objekten, das in die String-Vorlage eingefügt wird, dort als Argument übergeben. Die Ausgabe sieht folgendermaßen aus:
The disk "MyDisk" contains 1 273 file(s).
Es kann auch sichergestellt werden, dass der gewünschte Text abhängig vom Wert der Variablen ausgewählt wird. Eine Art Implementierung des Operators if...else, die nur die Klasse verwendet ChoiceFormat. Hier ist der Code:
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));
Dieser Code ändert abhängig vom Wert der Variablen countdie Ausgabe der Zeile wie folgt:
  • wenn count = 1die Schlussfolgerung so ist

    Я могу подтянуться 1 раз.
  • wenn count = 2die Schlussfolgerung so ist

    Я могу подтянуться 2 раза.
  • wenn count = 7die Schlussfolgerung so ist

    Я могу подтянуться 7 раз.
Dieser Code erstellt ein Array double[] filelimits, das die Wertegrenzen angibt, bei denen sich die Ausgabe von Zeichenfolgen ändert. Und das Array String[] filepartzeigt genau die Varianten der Zeichenfolgen an, die verwendet werden können. Die Bedingungen für die Auswahl einer Linienoption aus dem Variablenwert werden wie folgt bestimmt: Die Option wird ausgewählt, filepart[j]wenn filelimits[j] =< count < filelimits[j+1]. Als nächstes wird ein Objekt erstellt und Arrays ChoiceFormat fileforman seinen Konstruktor übergeben . Mit der Methode teilen wir dem Objekt mit , dass beim Aufruf der Methode für den Index 0 in der Zeilenvorlage die Formatierung verwendet wird, die im Objekt angegeben wurde . Bußgeld. Im Prinzip haben Sie vielleicht schon die Idee, niemals eine Java-Klasse zu verwenden , wissen aber, dass das nicht alles ist. Es gibt diesen Code: 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));
Hier ist das Hauptmerkmal des Arrays Format[] testFormats. In diesem Array fügen wir Objekte hinzu (die die abstrakte Klasse implementieren Format), die für die Formatierung der im Array definierten Objekte verantwortlich sind Object[] testArgs. Format[] testFormatsWenn das Objekt keine Formatierung benötigt, dann null. pattform.setFormats(testFormats)Als nächstes teilen wir dem Objekt mit der Methode mit MessageFormat pattform, dass alle Indizes im Zeilenmuster die im Array definierte Formatierung verwenden sollen Format[] testFormats. Für dieses Beispiel wäre die Ausgabe:
There are no files on ADisk.
28.04.18 22:10
Das ist alles und ich hoffe, dass Sie bei der Lösung von Problem 2412 keine Schwierigkeiten haben werden.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION