84

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

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が、うまくいきませんでした。それを機能させるには、どのような変更が必要ですか?

4

6 に答える 6

135

文字が確実に表示されるよう'に、MessageFormatパターンに余分なアポストロフィを追加しますString'

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

MessageFormat パターンのアポストロフィ (シングル クォートとも呼ばれます) は、引用符で囲まれた文字列を開始し、単独では解釈されません。javadocから

一重引用符自体は、文字列全体で二重の一重引用符 '' で表す必要があります。

String You\\'reにバックスラッシュ文字を追加することと同じであるStringため、唯一の違いはYou\reではなく が生成されることですYoure。(二重引用符ソリューションを''適用する前)

于 2013-07-10T11:36:01.460 に答える
12

二重アポストロフィ ('') を使用していることを確認してください。

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

編集:

文字列内では、一重引用符のペアを使用して、一重引用符を除く任意の文字を引用できます。たとえば、パターン文字列 "'{0}'" は、FormatElement ではなく、文字列 "{0}" を表します。...

一致しない引用符は、指定されたパターンの最後で閉じられているものとして扱われます。たとえば、パターン文字列 " ' {0}" はパターン " ' {0} ' "として扱われます。

ソースhttp://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html

于 2013-07-10T12:02:09.647 に答える
6

"You''re" では、単一の代わりに二重のアポストロフィを使用する必要があります。例:

String text = java.text.MessageFormat.format("You''re about to delete {0} rows.", 5);
System.out.println(text);
于 2013-07-10T11:38:02.953 に答える
4
于 2017-12-14T16:47:30.913 に答える
3

string.xml で Android の問題が発生している場合は、一重引用符の代わりに \'\' を使用してください。

于 2014-07-30T09:49:40.137 に答える