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

Classe MessageFormat

Pubblicato nel gruppo Random-IT
In questo articolo voglio parlare della classe MessageFormatutilizzata nell'attività 2412 (task2412). Formato messaggio di classe - 1La classe MessageFormatè progettata per creare stringhe. Questa classe Java prende un insieme di oggetti, li formatta e quindi inserisce le stringhe formattate nel modello nelle posizioni appropriate. Questa è una sorta di alternativa (o addirittura aggiunta) al metodo statico String.format. Innanzitutto, un semplice esempio di utilizzo di questa classe Java senza creare un oggetto, ma utilizzando un metodo statico:
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);
Qui viene chiamato un metodo statico MessageFormat.format, al quale vengono passati come argomenti il ​​modello di stringa e, di fatto, gli oggetti che verranno inseriti in luoghi delimitati da parentesi {}. Tra parentesi è specificata la posizione dell'oggetto a partire da 0, così come il tipo di formattazione, se presente. L'output sarà simile al seguente:
At 21:25:54 on 28 апр. 2018 г., there was a disturbance in the Force on planet 7.
L'esempio seguente crea già un oggetto della 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));
Quando viene creato un oggetto classe, MessageFormatun modello di stringa viene passato al suo costruttore. Successivamente, quando si chiama un metodo formatsu un oggetto, viene passato come argomento un array di oggetti che verranno inseriti nel modello di stringa. L'output sarà simile al seguente:
The disk "MyDisk" contains 1 273 file(s).
È anche possibile assicurarsi che il testo richiesto venga selezionato in base al valore della variabile. Una sorta di implementazione dell'operatore if...else, utilizzando solo la classe ChoiceFormat. Ecco il codice:
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));
Questo codice, a seconda del valore della variabile, countmodifica l'output della riga come segue:
  • se count = 1la conclusione è questa

    Я могу подтянуться 1 раз.
  • se count = 2la conclusione è questa

    Я могу подтянуться 2 раза.
  • se count = 7la conclusione è questa

    Я могу подтянуться 7 раз.
Questo codice crea un array double[] filelimitsche specifica i limiti dei valori ai quali cambierà l'output delle stringhe. E l'array String[] filepartindica proprio le varianti di stringhe che possono essere utilizzate. Le condizioni per selezionare un'opzione di linea dal valore della variabile sono determinate come segue: l'opzione sarà selezionata filepart[j]se filelimits[j] =< count < filelimits[j+1]. Successivamente, viene creato un oggetto e gli array ChoiceFormat fileformvengono passati al relativo costruttore . Con il metodo, diciamo all'oggetto che quando viene chiamato il metodo , quindi per l'indice 0 nel modello di riga, utilizzare la formattazione specificata nell'oggetto . Bene. In linea di principio, potresti già avere l'idea di non utilizzare mai una classe Java , ma sappi che questo non è tutto. C'è questo codice: 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));
Ecco la caratteristica principale dell'array Format[] testFormats. In questo array aggiungiamo oggetti (implementando la classe astratta Format) che sono responsabili della formattazione degli oggetti definiti nell'array Object[] testArgs. Format[] testFormatsSe l'oggetto non necessita di formattazione, allora null. pattform.setFormats(testFormats)Successivamente, utilizziamo il metodo per indicare all'oggetto MessageFormat pattformche tutti gli indici nel modello di riga dovrebbero utilizzare la formattazione definita nell'array Format[] testFormats. Per questo esempio, l'output sarebbe:
There are no files on ADisk.
28.04.18 22:10
Questo è tutto e spero che non avrai alcuna difficoltà nel risolvere il problema 2412.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION