JavaRush /Java Blog /Random-JA /MessageFormat クラス
Виталий Рыжаков
レベル 40
Москва

MessageFormat クラス

Random-JA グループに公開済み
この記事では、タスク 2412 (task2412) で使用されるクラスについて説明したいと思いますMessageFormatクラス MessageFormat - 1このクラスはMessageFormat文字列を作成するように設計されています。この Java クラスは、オブジェクトのセットを取得してフォーマットし、フォーマットされた文字列をテンプレートの適切な場所に挿入します。これは、静的メソッドの一種の代替 (または追加) ですString.format。まず、オブジェクトを作成せずに静的メソッドを使用して、この Java クラスを使用する簡単な例を示します。
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);
ここでは静的メソッドが呼び出されMessageFormat.format、文字列テンプレートと、実際には括弧で区切られた場所に挿入されるオブジェクトが引数として渡されます{}。から始まるオブジェクトの位置は0、書式設定のタイプ (存在する場合) とともに括弧内に指定されます。出力は次のようになります。
At 21:25:54 on 28 апр. 2018 г., there was a disturbance in the Force on planet 7.
次の例では、クラスのオブジェクトがすでに作成されています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));
クラス オブジェクトが作成されると、MessageFormat文字列テンプレートがそのコンストラクターに渡されます。次に、オブジェクトのメソッドを呼び出すときにformat、文字列テンプレートに挿入されるオブジェクトの配列が引数として渡されます。出力は次のようになります。
The disk "MyDisk" contains 1 273 file(s).
変数の値に応じて、必要なテキストが選択されていることを確認することもできます。if...elseクラスのみを使用する、演算子の実装の一種ChoiceFormat。コードは次のとおりです。
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));
このコードは、変数の値に応じて、count行の出力を次のように変更します。
  • count = 1結論がこうなら

    Я могу подтянуться 1 раз.
  • count = 2結論がこうなら

    Я могу подтянуться 2 раза.
  • count = 7結論がこうなら

    Я могу подтянуться 7 раз.
double[] filelimitsこのコードは、文字列の出力が変更される値の制限を指定する 配列を作成します。そして、配列はString[] filepart使用できる文字列のバリエーションそのものを示します。filepart[j]変数値から行オプションを選択する条件は次のように決定されます。の場合にオプションが選択されますfilelimits[j] =< count < filelimits[j+1]。次に、オブジェクトが作成され、配列と配列ChoiceFormat fileformがそのコンストラクターに渡されます。このメソッドを使用して、メソッドが呼び出されたときに、行テンプレートのインデックス 0 に対してオブジェクトで指定された書式設定を使用することをオブジェクトに伝えます。大丈夫。原理的には、Java クラスを決して使用しないという考えをすでに持っているかもしれませんが、これがすべてではないことを知ってください。このコードがあります: 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));
これが配列の主な特徴ですFormat[] testFormatsFormatこの配列には、配列で定義されたオブジェクトのフォーマットを担当するオブジェクト (抽象クラスを実装) を追加しますObject[] testArgs。オブジェクトの書式設定が必要ないFormat[] testFormats場合は、 null. 次に、メソッドを使用して、行テンプレート内のすべてのインデックスが array で定義された書式設定を使用する必要があることをオブジェクトに伝えpattform.setFormats(testFormats)ます。この例の場合、出力は次のようになります。 MessageFormat pattformFormat[] testFormats
There are no files on ADisk.
28.04.18 22:10
以上です。問題 2412 を解くときに問題が発生しないことを願っています。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION