JavaRush /Blogue Java /Random-PT /Classe MessageFormat
Виталий Рыжаков
Nível 40
Москва

Classe MessageFormat

Publicado no grupo Random-PT
Neste artigo quero falar sobre a classe MessageFormatque é usada na tarefa 2412 (task2412). Classe MessageFormat - 1A classe MessageFormatfoi projetada para criar strings. Esta classe Java pega um conjunto de objetos, formata-os e depois insere as strings formatadas no modelo nos locais apropriados. Esta é uma espécie de alternativa (ou mesmo adição) ao método estático String.format. Primeiro, um exemplo simples de uso desta classe Java sem criar um objeto, mas usando um método estático:
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);
Aqui é chamado um método estático MessageFormat.format, ao qual são passados ​​como argumentos o template da string e, de fato, os objetos que serão inseridos nos locais delimitados por parênteses {}. A posição do objeto começando em é especificada entre parênteses 0, bem como o tipo de formatação, se houver. A saída será assim:
At 21:25:54 on 28 апр. 2018 г., there was a disturbance in the Force on planet 7.
O exemplo a seguir já cria um objeto da 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 um objeto de classe é criado, MessageFormatum modelo de string é passado para seu construtor. A seguir, ao chamar um método formatem um objeto, um array de objetos que será inserido no modelo de string é passado como argumento. A saída será assim:
The disk "MyDisk" contains 1 273 file(s).
Também é possível garantir que o texto necessário seja selecionado dependendo do valor da variável. Uma espécie de implementação do operador if...else, utilizando apenas a classe ChoiceFormat. Aqui está o código:
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));
Este código, dependendo do valor da variável, countaltera a saída da linha da seguinte forma:
  • se count = 1a conclusão for assim

    Я могу подтянуться 1 раз.
  • se count = 2a conclusão for assim

    Я могу подтянуться 2 раза.
  • se count = 7a conclusão for assim

    Я могу подтянуться 7 раз.
Este código cria um array double[] filelimitsque especifica os limites de valores nos quais a saída das strings será alterada. E o array String[] filepartindica as próprias variantes de strings que podem ser usadas. As condições para selecionar uma opção de linha a partir do valor da variável são determinadas da seguinte forma: a opção será selecionada filepart[j]se filelimits[j] =< count < filelimits[j+1]. Em seguida, um objeto e arrays são criados e ChoiceFormat fileformpassados ​​para seu construtor . Com o método, dizemos ao objeto que quando o método for chamado , então, para o índice 0 no modelo de linha, use a formatação que foi especificada no objeto . Multar. Em princípio, você já deve ter a ideia de nunca usar uma classe Java , mas saiba que isso não é tudo. Existe este código: 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));
Aqui está o principal recurso do array Format[] testFormats. Neste array adicionamos objetos (implementando a classe abstrata Format) que são responsáveis ​​pela formatação dos objetos definidos no array Object[] testArgs. Format[] testFormatsSe o objeto não precisar de formatação, então null. pattform.setFormats(testFormats)A seguir, usamos o método para informar ao objeto MessageFormat pattformque todos os índices no padrão de linha devem usar a formatação definida no array Format[] testFormats. Para este exemplo, a saída seria:
There are no files on ADisk.
28.04.18 22:10
Isso é tudo, e espero que você não tenha dificuldades ao resolver o problema 2412.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION