1. ホーム
  2. java

[解決済み] JavaでMessageFormat.format()を使ってメッセージをフォーマットする

2023-06-01 11:48:33

質問

リソースバンドルにいくつかのメッセージを保存しています。私はこれらのメッセージを次のようにフォーマットしようとしています。

import java.text.MessageFormat;

String text = MessageFormat.format("You're about to delete {0} rows.", 5);
System.out.println(text);

最初のパラメータ、すなわち実際のメッセージはプロパティファイルに保存され、何らかの方法で取得されると仮定します。

2番目のパラメータである5は動的な値であり、プレースホルダである {0} に置かれるはずですが、そうなっていません。次の行が表示されます。

0}行を削除しようとしています。

プレースホルダが実際のパラメータに置き換わっていません。


ここではアポストロフィである - You're . 普通にエスケープしようとすると You\\'re のようにエスケープしてみましたが、うまくいきませんでした。動作させるためにはどのような変更が必要でしょうか?

どのように解決するのですか?

アポストロフィを追加する 'MessageFormat パターン String を確保するために ' という文字が表示されます。

String text = 
     java.text.MessageFormat.format("You''re about to delete {0} rows.", 5);
                                         ^

アポストロフィ(別名 シングルクォート ) は、引用文字列を開始するものであり、それ自身は解釈されません。から javadoc

シングルクォート自体は、String全体を通して2重のシングルクォート「'」で表現する必要があります。

String You\\'re はバックスラッシュ文字を追加することと同じです。 String となるので、唯一の違いは You\re が生成されるのではなく Youre . (ダブルクォート解決策の前に '' を適用)