JavaRush /Blog Java /Random-FR /Classe MessageFormat
Виталий Рыжаков
Niveau 40
Москва

Classe MessageFormat

Publié dans le groupe Random-FR
Dans cet article, je souhaite parler de la classe MessageFormatutilisée dans la tâche 2412 (task2412). Format du message de classe - 1La classe MessageFormatest conçue pour créer des chaînes. Cette classe Java prend un ensemble d'objets, les formate, puis insère les chaînes formatées dans le modèle aux emplacements appropriés. C'est une sorte d'alternative (voire d'ajout) à la méthode statique String.format. Tout d'abord, un exemple simple d'utilisation de cette classe Java sans créer d'objet, mais en utilisant une méthode statique :
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);
Ici, une méthode statique est appelée MessageFormat.format, à laquelle sont passés comme arguments le modèle de chaîne et, en fait, les objets qui seront insérés dans des endroits délimités par des parenthèses {}. La position de l'objet à partir de est précisée entre parenthèses 0, ainsi que le type de formatage éventuel. Le résultat sera comme ceci :
At 21:25:54 on 28 апр. 2018 г., there was a disturbance in the Force on planet 7.
L'exemple suivant crée déjà un objet de la classe 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));
Lorsqu'un objet de classe est créé, MessageFormatun modèle de chaîne est transmis à son constructeur. Ensuite, lors de l'appel d'une méthode formatsur un objet, un tableau d'objets qui sera inséré dans le modèle de chaîne y est passé en argument. Le résultat sera comme ceci :
The disk "MyDisk" contains 1 273 file(s).
Il est également possible de s'assurer que le texte requis est sélectionné en fonction de la valeur de la variable. Une sorte d'implémentation de l'opérateur if...else, utilisant uniquement la classe ChoiceFormat. Voici le 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));
Ce code, en fonction de la valeur de la variable, countmodifie le résultat de la ligne comme suit :
  • si count = 1la conclusion est comme ça

    Я могу подтянуться 1 раз.
  • si count = 2la conclusion est comme ça

    Я могу подтянуться 2 раза.
  • si count = 7la conclusion est comme ça

    Я могу подтянуться 7 раз.
Ce code crée un tableau double[] filelimitsqui spécifie les limites de valeurs auxquelles la sortie des chaînes changera. Et le tableau String[] filepartindique les variantes mêmes de chaînes qui peuvent être utilisées. Les conditions de sélection d'une option de ligne à partir de la valeur variable sont déterminées comme suit : l'option sera sélectionnée filepart[j]si filelimits[j] =< count < filelimits[j+1]. Ensuite, un objet est créé et les tableaux ChoiceFormat fileformsont transmis à son constructeur . Avec la méthode, nous disons à l'objet que lorsque la méthode est appelée , puis pour l'index 0 dans le modèle de ligne, utilisez le formatage spécifié dans l'objet . Bien. En principe, vous avez peut-être déjà l'idée de ne jamais utiliser de classe Java , mais sachez que ce n'est pas tout. Il y a ce 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));
Voici la principale caractéristique du tableau Format[] testFormats. Dans ce tableau, nous ajoutons des objets (implémentant la classe abstraite Format) qui sont responsables du formatage des objets définis dans le tableau Object[] testArgs. Format[] testFormatsSi l'objet n'a pas besoin d'être formaté, alors null. pattform.setFormats(testFormats)Ensuite, nous utilisons la méthode pour indiquer à l'objet MessageFormat pattformque tous les index du modèle de ligne doivent utiliser le formatage défini dans le tableau Format[] testFormats. Pour cet exemple, le résultat serait :
There are no files on ADisk.
28.04.18 22:10
C'est tout, et j'espère que vous n'aurez aucune difficulté à résoudre le problème 2412.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION